DaiN___ 2021-09-15 12:39 采纳率: 100%
浏览 42
已结题

C语言中关于sizeof的结果?

64位环境中为什么使用两种方式得到的结果不一致? 见代码

#include <stdio.h>

void arrayLength(int numbers[]);

int main() {
    int numbers[] = {1, 2, 3};
    printf("size of numbers: %llu\n", sizeof(numbers)); // 12, 这里的numbers是指针, sizeof是如何知道其有多少个元素的?
    arrayLength(numbers);
    return 0;
}

void arrayLength(int numbers[]) {
    printf("size of numbers: %llu\n", sizeof(numbers)); // 8, 这里的结果为什么与main中得到的结果不一致? 这里的numbers也是指针啊,而且地址跟main中的一样
}

  • 写回答

4条回答 默认 最新

  • 关注

    传入函数的是指针,指针本身不带长度信息,这个没什么问题
    在main中直接打印的话,因为你使用了初始化器
    这是在main中数组长度会由初始化器长度决定
    而同一个函数内部直接看到的是一个int[3],是带长度的

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月23日
  • 已采纳回答 9月15日
  • 修改了问题 9月15日
  • 创建了问题 9月15日

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置