如何解决数组的奇怪输出作为C中的函数参数
我正在mycodeschool上学习C指针课程,这是C中的代码:
#include<stdio.h>
int SumOfElements(int A[])
{
int i,sum = 0;
int size = sizeof(A)/sizeof(A[0]);
printf("SOE size of A = %d,size of A[0] = %d\n",sizeof(A),sizeof(A[0]));
for(i = 0;i< size;i++)
{
sum+=A[i];
}
return sum;
}
int main()
{
int A[] = {1,2,3,4,5};
int total = SumOfElements(A);
printf("Main size of A = %d,sizeof(A[0]));
printf("Sum of elements = %d\n",total);
}
根据输出应为: enter image description here 相反,这段代码我得到了输出: enter image description here
根据该教程,他解释说,当编译器将数组视为函数参数时,它不会复制整个数组,而是仅创建一个指针变量,而不是创建整个数组。因此,在这种情况下,编译器只需将第一个元素的地址复制到调用函数(即主函数)的数组中即可。因此mycodeschool代码中A的大小为4,这很有意义。但是为什么我的sizeof(A)的输出是8?
解决方法
正如您所说的,int A[]
实际上是int *A
,A
变到指向数组第一个元素的指针,这完全不奇怪功能。
因此sizeof A
是指向int
的指针的大小。在64位系统中,指针的大小通常为8个字节,而在32位系统中,指针的大小通常为4,这不是规则,而是常见的行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。