2013-03-26 37 views
3

我有這個在我的代碼:無法理解的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)

+1

@modifiablelvalue:是的,我的意思是zu.I've已改變它。那麼,這是我第一次指向該網站,感謝您的信息!你可以順便冷靜下來,我是一名正在學習編程的學生,是的,這是我第一次遇到這個問題!所以再一次冷靜下來! – Chris 2013-03-26 09:27:08

+0

它返回ptr大小。即使您將x值設爲1000,它也只會返回8. – Jeyamaran 2014-07-30 06:39:15

回答

7

array是你的代碼中的指針。因此,sizeof(array)以C字節返回該指針的大小(提醒:C的字節可以有多於8位)。

所以,8是你的指針大小。

此外,printf()的格式字符串中size_t的正確類型說明符是%zu

+1

* C的字節可以有多於8位的內容?我需要鏈接閱讀 – 2013-03-26 08:13:11

+1

@GrijeshChauhan [Here's one](http://www.gnu.org/software/libc/manual/html_node/Width-of-Type.html)。 – 2013-03-26 08:14:12

+1

@GrijeshChauhan:http://en.wikipedia.org/wiki/Byte – jamesdlin 2013-03-26 10:47:23

3

array是一個指針,因此,這將是一個指針(sizeof(void *)sizeof(char *))的尺寸,而不是作爲sizeof(char)你可能期望。看來你使用的是64位電腦。

+0

@perreal thanks :-) - 更改我的答案。 – 2013-03-26 02:17:29

+0

您的意思是sizeof(* char),它是sizeof(* void)? – Patashu 2013-03-26 02:17:52

+0

'sizeof(void *)'或'sizeof(char *)'@Patashu – 2013-03-26 02:21:54

2

sizeof(array)返回指針的大小。

+2

只有'array' *是一個指針。給定'char array [999];','sizeof(array)'爲999. – 2013-03-26 04:43:55

-2

您正在計算完整數組的大小(4 * sizeof(char)) 但您應該知道數組(4)上的項目數。

可以做

爲size_t ARRAYSIZE =的sizeof(數組)/的sizeof(char)的;

它將返回8/2 = 4

+2

sizeof(char)*總是* 1 - C標準要求。查看正確答案的其他答案。 – 2013-03-26 04:36:56

3

sizeof沒有返回值,因爲它不是一個功能,它是一個C語言結構 - 考慮的是,你可以寫sizeof array沒有括號。作爲一種C語言結構,其價值完全基於編譯時信息。它不知道你的數組有多大,只有array指針變量有多大。請參閱http://en.wikipedia.org/wiki/Sizeof以瞭解該主題的完整範圍。

+0

你是否想說'sizeof'表達式在翻譯過程中總是被評估? – Sebivor 2013-03-28 01:15:01