数组大小(C)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (29)

一个简单的问题困扰着我。假设我在main中定义了一个数组,如下所示int arr[5]...。如果我还在主干道里int i = sizeof(arr)/sizeof(arr[0])然后我被设置为5,但是如果我将数组作为函数参数传递,并在这个函数中执行完全相同的计算,则得到一个不同的数字。那是为什么?一开始我认为这是因为在一个函数中arr是一个指针,但据我所知arr也是主内的指针!

另外,如果我只动态地初始化数组,就会得到非常类似的结果:

int *arr = (int*) malloc(sizeof(int) * 5);
int length = sizeof(*arr) / sizeof(arr[0]);
printf("%d\n",length);

这里的输出是1,知道为什么吗?

提问于
用户回答回答于

C数组不会在任何地方存储它们自己的大小,所以sizeof只有在编译时知道大小时,才能按照预期的方式工作。malloc()被编译器视为任何其他函数,因此sizeof不知道arr指向数组的第一个元素,更不用说它有多大了。如果需要知道数组的大小,则需要显式地将其作为单独的参数传递给函数,或者使用包含指向数组及其大小的指针的结构。

用户回答回答于

这是因为arr现在是一个指针,它可以指向一个int或1000个INT数组,函数就是不知道。必须将数组的大小传递给函数。

中,arr被声明为int。五这样编译器就可以计算出大小。

所属标签

可能回答问题的人

  • 最爱开车啦

    8 粉丝503 提问6 回答
  • 优惠活动秘书

    0 粉丝2 提问6 回答
  • uncle_light

    5 粉丝518 提问5 回答
  • Richel

    6 粉丝0 提问5 回答

扫码关注云+社区

领取腾讯云代金券