为啥sizeof获得的数组长度为8
void get_array(int a);void get_array(int a) {
int i;
printf("传入数组长度为%d\n",sizeof(a));//打印结果为8
}
int main() {
int i;
int a;
for(i=0; i<5; i++) {
printf("请输入%d个数\n",(i+1));
scanf("%d",&a);
}
get_array(a);
return 0;
} 本帖最后由 jackz007 于 2022-10-10 14:58 编辑
传入函数 get_array(int a) 的参数 a 只是一个指针变量,sizeof(a) 只能获得变量 a (指针)本身所占用的内存空间,而并不是数组的,由于你的程序是 64 位的,一个指针占用 8 个字节,所以,sizeof(a) 的值就是 8。如果把代码编译成 32 位程序,那么,这个值便会是 4。
所以,不可以在函数内用 sizeof() 来获取传入数组的元素数量,必须要想其它办法,比如,专门增加一个输入参数,或者,用数组的第一个元素进行传递等等。 jackz007 发表于 2022-10-10 14:54
传入函数 get_array(int a) 的参数 a 只是一个指针变量,sizeof(a) 只能获得变量 a (指针)本身 ...
感谢大佬,我这边还有个问题:
int a={1,2,3,4,5};
int i;
printf("%d",sizeof(a));
这样打印的sizeof的值是20,按照8位的话应该是40,求解答 本帖最后由 jackz007 于 2022-10-10 22:00 编辑
homeskating 发表于 2022-10-10 21:46
感谢大佬,我这边还有个问题:
int a={1,2,3,4,5};
int i;
通过 int a 定义的数组名 a 是和它所占用的空间进行绑定的,所以,a 不是一个变量,而是一块内存,例如,我们不可以以任何方法改变 a 的值,在 a 的有效作用域范围内,都可以根据 sizeof(a) 来确定数组 a 所占用的字节数,这一点和作为参数声明的函数参数 int b 是完全不同的,因为 b 是一个指针变量,不是一块内存本身。 homeskating 发表于 2022-10-10 21:46
感谢大佬,我这边还有个问题:
int a={1,2,3,4,5};
int i;
因为在你现在的这个环境上,一个int是4个字节
5个int就是20个字节
本帖最后由 jackz007 于 2022-10-11 00:34 编辑
homeskating 发表于 2022-10-10 21:46
感谢大佬,我这边还有个问题:
int a={1,2,3,4,5};
int i;
再举个例子
int a={1,2,3,4,5} , * b = a ;
printf("sizeof(a) = %d\n",sizeof(a));
printf("sizeof(b) = %d\n",sizeof(b));
在这个例子中,指针 b 指向了数组 a,可以通过 b 来访问 a,不仅如此,还可以使用和访问 a 完全一样的方式来访问 b,例如,b 就是 a,b 就是 a等等。但是,正如上面的代码所展示的结果那样,a 和 b 显然是存在本质区别的,a 代表数组本身,b 只是一个指针。在函数内使用 sizeof() 测试传入的数组大小,实际上得到的只能是一个指针的,而不可能是数组本身的大小。 jackz007 发表于 2022-10-11 00:31
再举个例子
在这个例子中,指针 b 指向了数组 a,可以通过 b 来访问 a,不仅如此, ...
好的,感谢老哥,理解了
页:
[1]