[英]sizeof string array in C++
我對C ++中的sizeof字符串數組感到困惑,我有以下字符串數組:
static const char* namedButtonStr[] = {
"GLUT_LEFT_BUTTON",
"GLUT_MIDDLE_BUTTON",
"GLUT_RIGHT_BUTTON"
};
要獲得此數組的大小,請使用以下代碼:
int size = int(sizeof(namedButtonStr)/sizeof(namedButtonStr[0]));
其中sizeof(namedButtonStr)
為12, sizeof(namedButtonStr[0])
為4,並且數組的大小為12/4 = 3。
我的問題是,為什么sizeof(namedButtonStr)
是12而sizeof(namedButtonStr[0])
是4? 我的理解是sizeof(namedButtonStr)
是3而sizeof(namedButtonStr[0])
是17(“GLUT_LEFT_BUTTON”有17個字符)。
namedButtonStr[0]
的類型為const char*
,因此它的sizeof
是指針的大小,而不是它指向的數組。
相反, namedButtonStr
是一個數組,因此它的sizeof
是整個數組的字節sizeof
,即3 * sizeof(<one item in the array>)
。
編輯:順便說一句,這是一個非常標准的習慣用於確定數組的大小,你會經常看到它。
我的問題是,為什么
sizeof(namedButtonStr)
是12而sizeof(namedButtonStr[0])
是4? 我的理解是sizeof(namedButtonStr)
是3而sizeof(namedButtonStr[0])
是17(“GLUT_LEFT_BUTTON”有17個字符)。
namedButtonStr
將包含3個指針。 (一般來說,C指針是4個字節,這可能會隨着64位總線變得普遍而改變,以及64位編譯器。)
因此,3個指針* 4(每個指針的字節數)= 12個字節。
namedButtonStr[0]
指的是這3個指針中的單個/第一個,如上所述,每個指針是4個字節。
結果是12/4 = 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.