为什么我的 A[] 函数参数的大小为 8 个字节而不是 4 个字节?
Why does my A[] function argument have size 8 bytes instead of 4?
我正在从 freeCodeCamp.org 学习 C 指针,我被困在数组指针上,因为函数参数跟在后面。
讲师的代码是这样的
int SumOfElement(int A[]) {
int i, sum = 0;
int size = sizeof(A)/sizeof(A[0]);
printf("SOE - Size of A = %d, size of A[0] = %d", 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("Sum of elements %d\n",total);
printf("Main - Size of A = %d, size of A[0] %d",sizeof(A),sizeof(A[0]));
}
他的结果(来自感兴趣的部分)是:
SOE - Size of A = 4
Main - Size of A = 20
我明白为什么会这样。但是在我的代码中,当我尝试 运行 类似的代码时,我从函数 sizeof(A)
内部打印得到 8
int myFunc(int a[]) {
printf("Size of a[] inside function is %d\n", sizeof(a));
return a;
}
int main(){
int a[] = {1, 2, 3, 4, 5};
myFunc(a); // Result is 8
printf("Size of a[] in main function is %d\n", sizeof(a)); // Result is 20
return 0;
}
int A[]
是一个数组声明,但由于它是函数参数列表的一部分,它被隐式调整为指向该数组第一个元素的指针。
int SumOfElement(int A[])
100% 等同于 int SumOfElement(int* A)
.
因此在该函数内部执行 sizeof A
是没有意义的,因为这样做总是会给你指针的大小。在 32 位系统上通常为 4 个字节,但在 64 位系统上通常为 8 个字节。
同理,int size = sizeof(A)/sizeof(A[0]);
也是废话。当 A
是一个已经衰减为指针的数组时,您无法计算这样的数组大小。这给你一个指针的大小除以 int
.
的大小
为了让这个函数有意义,它可能应该有一个单独的 size
参数。
我正在从 freeCodeCamp.org 学习 C 指针,我被困在数组指针上,因为函数参数跟在后面。
讲师的代码是这样的
int SumOfElement(int A[]) {
int i, sum = 0;
int size = sizeof(A)/sizeof(A[0]);
printf("SOE - Size of A = %d, size of A[0] = %d", 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("Sum of elements %d\n",total);
printf("Main - Size of A = %d, size of A[0] %d",sizeof(A),sizeof(A[0]));
}
他的结果(来自感兴趣的部分)是:
SOE - Size of A = 4
Main - Size of A = 20
我明白为什么会这样。但是在我的代码中,当我尝试 运行 类似的代码时,我从函数 sizeof(A)
内部打印得到 8
int myFunc(int a[]) {
printf("Size of a[] inside function is %d\n", sizeof(a));
return a;
}
int main(){
int a[] = {1, 2, 3, 4, 5};
myFunc(a); // Result is 8
printf("Size of a[] in main function is %d\n", sizeof(a)); // Result is 20
return 0;
}
int A[]
是一个数组声明,但由于它是函数参数列表的一部分,它被隐式调整为指向该数组第一个元素的指针。
int SumOfElement(int A[])
100% 等同于 int SumOfElement(int* A)
.
因此在该函数内部执行 sizeof A
是没有意义的,因为这样做总是会给你指针的大小。在 32 位系统上通常为 4 个字节,但在 64 位系统上通常为 8 个字节。
同理,int size = sizeof(A)/sizeof(A[0]);
也是废话。当 A
是一个已经衰减为指针的数组时,您无法计算这样的数组大小。这给你一个指针的大小除以 int
.
为了让这个函数有意义,它可能应该有一个单独的 size
参数。