כותב |
|
SRKedmi משתמש מתחיל
הצטרף / הצטרפה: 28 March 2008
משתמש: מנותק/ת הודעות: 1
|
נשלח בתאריך: 28 March 2008 בשעה 08:14 | | IP רשוּם
|
|
|
|
שאלה, cpp.
נתון מערך
int arr [n]
a. החלף את האיברים ה-"שכנים"
קוד:
/* Name: P47.3.1.3 Copyright: Author: **** ****** Date: 28/03/08 07:38 Description: */ #include <iostream.h> #include <conio.h> void printarr(int x[]) { int N = sizeof(x)/sizeof(int); for(int k=0; k <N; k++) cout<<"["<<x[k]<<"] "; cout<<endl; } int main() { int arr[] = {0,1, 2, 3, 4, 5, 6, 7, 8, 9}; int N = sizeof(arr)/sizeof(int); //1.Replace two neighbor cells. printarr(arr); for(int i=0; i<N; ) { arr[i]^=arr[i+1]; arr[i+1]^=arr[i]; arr[i]^=arr[i+1]; i+=2; } printarr(arr); getch(); return 0; }
הבעיה היא כזו, בפונקצית הדפסת המערך printarr
כאשר אני מנסה לגלות את גודל המערך הנתון הוא מחזיר לי 1
int N = sizeof(arr)/sizeof(int) //N equates to 1 ם_O ?
מדובר בסביבת עבודה שגודל משתנה מסוג אינטג'ר הוא 4 בייט.
וזה פשוט יוצר מצב לא הגיוני, כיוון שאם אני מציב במשתנה
N=10
אז הוא כן מדפיס לי את כל המערך..
משמע או שהפונקציה
sizeof
לא תקינה, או שאני פשוט עושה טעות שאני לא מודע אליה.
האם מישהו יכול לעזור עם זה?
תודה רבה.
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 28 March 2008 בשעה 14:53 | | IP רשוּם
|
|
|
|
נורא פשוט- שם המערך הוא מצביע לאיבר הראשון. אם אתה כותב פשוט את שם המערך ובודק את הגודל שלו עם sizeof אתה מקבל כמה מצביע תופס בזכרון. בשפת C אתה חייב להעביר משתנה נוסף למשל int length שיגיד לפונקציה מה אורך המערך - אחרת אין לך דרך לגעת מה גודלו האמיתי (יש לך רק את נקודת ההתחלה שלו).
ניר
__________________ מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
|
חזרה לתחילת העמוד |
|
|
|
|
אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם
|
אינך יכול/ה לשלוח נושאים חדשים בפורום זה אינך יכול/ה להגיב לנושאים בפורום זה אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה אינך יכול/ה לצור סקרים בפורום זה אינך יכול/ה להצביע בסקרים בפורום זה
|