char firstName[32];
我知道每個char在內存中佔用1個字節。上面是否佔用32字節的內存?C風格字符數組 - 我們存儲多少個字節?
我是否缺少一個佔用內存的指針,或者這只是32字節?
char firstName[32];
我知道每個char在內存中佔用1個字節。上面是否佔用32字節的內存?C風格字符數組 - 我們存儲多少個字節?
我是否缺少一個佔用內存的指針,或者這只是32字節?
不,這佔用了32個字節的內存。 沒有指針。
這往往是混亂的區域中,由於數組名靜默「衰減」發送「字符*」
char* fname = firstName;
所以,firstName
可以是const char*
類型的,但它本身不是一個char *變量。它完全是這樣的:
int x = 5;
x
是int變量並佔用空間。另一方面,5
只是int類型的一個常量值。它沒有空間;這只是一個價值。
這只是32個字節。數組的名稱有時候會像一樣指向指向第一個元素,但它的不是的一個指針。
它佔據了32個字節的內存,內部是一個地址。變量僅供我們理解。
佔用32個字節。它將保存一個31個字符的字符串(另一個字節用於空字符串終止符)。
我會說*可以*持有一個「31個字符的空字符結束」。它不必以null結尾,或者甚至是一個字符串。 – GManNickG 2010-08-09 19:04:02
語句char firstName[32]
在堆棧上創建32個字符或32個字節的數組。由於它位於堆棧上,因此編譯器確切知道它與堆棧指針相關的位置。編譯器會將數組的地址硬編碼爲任何使用它的操作;沒有必要存儲一個指針。
請務必注意,如果您嘗試將此數組作爲函數參數傳遞,它將降級爲指向數組的指針,因爲C++不允許按值傳遞基元數組。大多數對C++不熟悉的人會期望它傳遞一個數組副本。
它不一定在堆棧上。它可能是全球性的。它可能是結構的一部分。 – 2010-08-09 19:16:37
需要時有兩種方法可以去,例如, 32個字節,用於存儲您的數據。在這兩個版本的區別:
// version 1
char *firstName = new char[32];
// version 2
char firstName[32];
是,版本1的空間上堆分配你的數據,你必須釋放程序結束之前,而在2版的空間是堆棧。兩者都會給你一個指向可用空間的第一個字節的變量,在這兩種情況下這個空間都是32字節。人們會爭辯說,你有可能想要choose one over the other,但這是一個不同的故事。
的sizeof(名字)
有趣的一點是什麼的sizeof將返回,這是一個字符指針的大小,版本1和32(取決於你的系統和編譯器)爲第2版。請介意另一個用戶提到的,將名字轉換爲一個函數將其降級爲指針。
數組的大小是每個標準的元素數乘以每個元素的大小。所以是的,因爲你有32個元素,每個元素的大小都是1('sizeof(char)'總是1),總大小爲32. – GManNickG 2010-08-09 19:06:27