char指针数组sizeof运算输出20而非预期15的问题咨询
问题核心原因
你对sizeof的计算对象和char*数组的存储逻辑存在误解:
- 你定义的
char* arrChar[5]是指针数组,数组内存储的不是字符串本身,是5个指向字符串常量首地址的指针。 sizeof(数组名)计算的是整个数组本身占用的内存总大小,和数组元素指向的外部存储内容无关。
结果计算逻辑
你运行的环境是32位系统/编译为32位程序:
- 32位环境下所有指针类型的固定大小是4字节
- 数组共有5个指针元素,总大小 = 5 * 4 = 20字节,和你得到的输出完全匹配
如果你在64位环境下编译运行,指针大小为8字节,输出结果会是40。
你之前计算的15字节是什么
15字节是5个字符串常量本身的存储总大小,这些字符串存储在程序的静态常量区,arrChar数组只是存储了它们的首地址,并没有把字符串内容拷贝到数组的内存空间里。
如果你想要数组直接存储字符串、得到15字节的结果,可以改为定义二维char数组:
#include <stdio.h> char arrChar[5][3] = { "hh","jj","kk","zz","xx" }; int main() { printf("size = %d\n", sizeof(arrChar)); // 输出为15 }
内容的提问来源于stack exchange,提问作者adirk1
相关产品推荐
相关产品推荐

