You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于指针、指向指针的指针及指针数组的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:25:28