【发布时间】:2021-03-14 15:59:10
【问题描述】:
据我所知,作为函数参数传递的数组并未完全复制,而只是指向数组中第一个元素的地址的指针。为了看到它的实际效果,我写了一段代码,我在互联网上找到并预计 SumOfElements() 中的 sizeof(A) 应该是 4。不知何故是 8。我错过了什么?
#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, size of A[0]: %d\n", sizeof(A), sizeof(A[0]));
//printf("Sum of elements = %d\n", total);
}
【问题讨论】:
-
用
%zu而不是%d打印sizeof的结果。 C 实现中的指针大小是多少?为什么你认为它们是四个字节而不是八个? -
好吧,当我打印出总和时,它还将数组的前两个数字相加,它返回 sum = 3 而不是 sum = 1;
-
数组的前两个元素之和与指针的大小无关,就像房子里有多少东西与街道上有多少数字一样号码贴在房子的前门上。
-
数组有五个元素,在主函数中A的大小是20。所以指针的大小应该是4,对吧?编辑:没关系,我明白了...
标签: arrays c function pointers