gpt4 book ai didi

c - c中数组的大小

转载 作者:太空狗 更新时间:2023-10-29 16:29:12 26 4
gpt4 key购买 nike

一个困扰我的简单问题。假设我在 main 中定义了一个数组,例如 int arr[5]。现在,如果我仍在 main 中并且我设置了 int i = sizeof(arr)/sizeof(arr[0]) 那么我将设置为 5,但是如果我将数组作为函数参数并在这个函数中做完全相同的计算,我得到一个不同的数字。这是为什么?起初我以为是因为在函数中 arr 是一个指针,但据我所知 arr 也是 main 内部的指针!

此外,如果我只做一些非常相似的事情,只是动态初始化数组,我会得到奇怪的结果:

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

这里的输出是1。任何想法为什么?提前致谢!

最佳答案

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

关于c - c中数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com