C ++中的sizeof字符串数组

时间:2014-11-11 22:19:30

标签: c++ c arrays sizeof

我对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个字符)。

2 个答案:

答案 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