2016-09-26 63 views
3

有人可以告訴我關於c中的內存分配嗎? char變量的大小是多少? 2或4? 爲什麼數組中2個相鄰char元素之間地址值的差異只有1?sizeof char /數組長度C中的內存分配,

char foo [] = {'a', 'b'}; 
printf ("This is the Address of val1 %d \n", &foo[1]);   // -1079295441 
printf ("This is the Address of val2 %d \n", &foo[2]);   // -1079295440 
printf ("The size of each array member is %d \n", sizeof(foo)); // 2 
+0

'foo'是一個字符數組,並且與其他數組具有相同的大小,因爲它本質上只是一個指針。 「 – apokryfos

+0

」char變量的大小是多少?2或4?「這是1 – samgak

+1

@apokryfos,數組是*不*指針。它們有各種尺寸,取決於它們的元素類型和容量。 –

回答

3

您未正確打印地址:地址是不是int,所以你不能使用%d進行打印。使用%p(即「指針」)來代替,投地址void*打印:

printf ("This is the Address of val1 %p\n", (void*)&foo[1]); 

現在你的程序產生這樣或類似的輸出:

This is the Address of val1 0xffbd2fcf 
This is the Address of val2 0xffbd2fd0 
The size of each array member is 2 

兩個指針是關閉的1,這是單個的尺寸char。整個陣列的大小是2。如果要打印單個元素的大小,請使用foo[0]

+0

@Oka在這個答案中沒有過多演員 –

+1

@Oka這是必需的。 '%p'想'void *',所以傳遞'int *'被認爲是UB。 – dasblinkenlight

+0

啊,這是安全提升任何指向'void *'的指針的例外。猜測這與可變參數有關嗎?有趣。 – Oka