我有這個在我的代碼:無法理解的sizeof()的返回值
int x = 4;
char* array = malloc(x*sizeof(char));
size_t arraysize = sizeof (array);
printf("arraysize: %zu\n", arraysize);
此代碼打印出來,
ARRAYSIZE:8
爲什麼是8和不是4? (由於圖4 *的sizeof(char)的= 4 * 1)
我有這個在我的代碼:無法理解的sizeof()的返回值
int x = 4;
char* array = malloc(x*sizeof(char));
size_t arraysize = sizeof (array);
printf("arraysize: %zu\n", arraysize);
此代碼打印出來,
ARRAYSIZE:8
爲什麼是8和不是4? (由於圖4 *的sizeof(char)的= 4 * 1)
array
是你的代碼中的指針。因此,sizeof(array)
以C字節返回該指針的大小(提醒:C的字節可以有多於8位)。
所以,8是你的指針大小。
此外,printf()的格式字符串中size_t
的正確類型說明符是%zu
。
* C的字節可以有多於8位的內容?我需要鏈接閱讀 – 2013-03-26 08:13:11
@GrijeshChauhan [Here's one](http://www.gnu.org/software/libc/manual/html_node/Width-of-Type.html)。 – 2013-03-26 08:14:12
@GrijeshChauhan:http://en.wikipedia.org/wiki/Byte – jamesdlin 2013-03-26 10:47:23
array
是一個指針,因此,這將是一個指針(sizeof(void *)
或sizeof(char *)
)的尺寸,而不是作爲sizeof(char)
你可能期望。看來你使用的是64位電腦。
@perreal thanks :-) - 更改我的答案。 – 2013-03-26 02:17:29
您的意思是sizeof(* char),它是sizeof(* void)? – Patashu 2013-03-26 02:17:52
'sizeof(void *)'或'sizeof(char *)'@Patashu – 2013-03-26 02:21:54
sizeof(array)
返回指針的大小。
只有'array' *是一個指針。給定'char array [999];','sizeof(array)'爲999. – 2013-03-26 04:43:55
您正在計算完整數組的大小(4 * sizeof(char)) 但您應該知道數組(4)上的項目數。
可以做
爲size_t ARRAYSIZE =的sizeof(數組)/的sizeof(char)的;
它將返回8/2 = 4
sizeof(char)*總是* 1 - C標準要求。查看正確答案的其他答案。 – 2013-03-26 04:36:56
sizeof
沒有返回值,因爲它不是一個功能,它是一個C語言結構 - 考慮的是,你可以寫sizeof array
沒有括號。作爲一種C語言結構,其價值完全基於編譯時信息。它不知道你的數組有多大,只有array
指針變量有多大。請參閱http://en.wikipedia.org/wiki/Sizeof以瞭解該主題的完整範圍。
你是否想說'sizeof'表達式在翻譯過程中總是被評估? – Sebivor 2013-03-28 01:15:01
@modifiablelvalue:是的,我的意思是zu.I've已改變它。那麼,這是我第一次指向該網站,感謝您的信息!你可以順便冷靜下來,我是一名正在學習編程的學生,是的,這是我第一次遇到這個問題!所以再一次冷靜下來! – Chris 2013-03-26 09:27:08
它返回ptr大小。即使您將x值設爲1000,它也只會返回8. – Jeyamaran 2014-07-30 06:39:15