微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数组的奇怪输出作为C中的函数参数

如何解决数组的奇怪输出作为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 *AA变到指向数组第一个元素的指针,这完全不奇怪功能。

因此sizeof A是指向int的指针的大小。在64位系统中,指针的大小通常为8个字节,而在32位系统中,指针的大小通常为4,这不是规则,而是常见的行为。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。