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 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号