关于指针、指向指针的指针及指针数组的sizeof问题咨询
关于C语言中指针与数组的
sizeof问题解答 1. 指针与指向指针的指针的sizeof是否相等?
在同一系统架构下(比如64位或32位),所有指针类型的sizeof结果都是相同的。因为指针本质是存储内存地址的变量,不管它指向普通数据、指针还是其他类型,存储地址所需的字节数只由系统地址总线宽度决定。比如64位系统里所有指针大小都是8字节,32位系统则是4字节,所以char*和char**的sizeof结果一致。
2. 为何指针数组的sizeof有时和单个指针的sizeof结果相同?
这是因为数组名在部分场景下会隐式退化为指向数组首元素的指针:
- 当指针数组作为函数参数传递时,数组名会被转换为指针,此时在函数内部对这个参数取
sizeof,得到的是指针大小,而非整个数组的总大小。 - 若将数组名赋值给指针变量(比如
char** p = vet;),再对p取sizeof,得到的也是指针大小,而非数组总大小。
但如果直接对当前作用域内的指针数组变量取sizeof(比如char *vet[10]; sizeof(vet)),得到的会是整个数组的总字节数,不会和单个指针大小混淆。
3. 如何获取char *vet[10]的总字节大小?
直接使用sizeof(vet)即可,前提是vet是数组类型变量(未被隐式转换为指针)。比如64位系统中sizeof(char*)为8字节,char *vet[10]包含10个指针元素,总大小就是10 * 8 = 80字节,sizeof(vet)会直接返回该值。
示例代码:
#include <stdio.h> int main() { char *vet[10]; printf("数组总大小:%zu\n", sizeof(vet)); // 64位系统输出80 printf("单个指针大小:%zu\n", sizeof(vet[0])); // 输出8 return 0; }
注意:
sizeof返回值类型是size_t,打印时建议用%zu格式符,而非%llu,避免类型不匹配问题。
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

