我对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个字符)。
答案 0 :(得分:7)
namedButtonStr[0]
的类型为const char*
,因此其sizeof
是指针的大小,而不是指向的数组。
namedButtonStr
是一个数组,因此它的sizeof
是整个数组的字节大小,即3 * sizeof(<one item in the array>)
。
编辑:顺便说一下,这是一个非常标准的用于确定数组大小的习惯用法,你会经常看到它。
答案 1 :(得分:2)
我的问题是,为什么
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