עבור לתוכן

כמה שאלות קטנות בנוגע לתכנות ב C

Featured Replies

פורסם

יש לי כמה שאלות קטנות אבל מציקות שאני לא מוצא להן תשובה בשום ספר, מודה מראש על העזרה.

א. אם נגיד רשום לי

int x=2, *p;

x=sizeof(x);

x=sizeof(p);

כמה יהיה שווה בשני המקרים X?

ב. האם שתי דרכי הכתיבה נכונות:

void main()

}

char *s="bla";

והשנייה

char *s;

s="bla";

ג. מה עושות שתי הפקודות:

int x=5, *p;

x=(int)p;

p=(int*)x;

נגיד ש- x=5 והכתובת של x היא fff8 מה יהיה הערך של p לאחר הצבה זו?

ד. פויינטר לפויינטר:

int *ptr;

int **ptr2;

*ptr2=ptr

האם זה בעצם אומר שהמצביע השני מקבל את הכתובת של הראשון??

פורסם

א.

sizeof(int) = 16bit = 2bytes (max unsigned int = 65535)

לכולנו יש מעבד של 32 ביט לכן כתובת היא 32 ביט

sizeof(int*) = sizeof(pointer) = 32bit = 4byte

ב. אין הבדל.

ג. הפקודה הראשונה גורמת לכך ש-x יהיה שווה לכתובת של משהו בזיכרון (לא הגדרתלמה p מצביע ככה שהוא בעצם יהיה זבל)

אם היית עושה p=&x לפני הפקודה הראשון אז x=(int)p היה בעצם משנה את x לכתובת של עצמו בזיכרון (וכמובן שיש פה בעיה של המרה מ-32 ביט ל-16 ביט)

הפקודה גורמת לכך ש-p יצביע לכתובת שערכה x. אם היית עושה לפני x=100 אז p היה מצביע לכתובת 100.

ד. ptr2=&ptr אומר שהשני יקבל את הכתובת של הראשון

תתיחס ל-int* בתור טיפוס מסוג bla

אז יש לך בעצם

bla ptr

bla *ptr2

ואז ברור שאתה צריך לעשות ptr2=&ptr

להבא רכז שאלות בתראד אחד ואל תפתח כמה

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים