【发布时间】:2021-10-07 01:00:11
【问题描述】:
void Size(int A[], int size){
printf("Size of A = %d\nSize of A[0] = %d\n\n", sizeof(A), sizeof(A[0]));
}
这样做时,我得到了一个意想不到的答案:
Size of A = 8
Size of A[0] = 4
据我所知,当我们将数组传递给函数时,我们使用“按引用传递”并通过检查 sizeof(A) 我们应该得到数组类型的大小。请问您能帮我解决这个问题吗?
【问题讨论】:
-
C 中没有
pass by reference。C 中唯一的类型是按值传递。 C 和 C++ 是非常不同的语言 -
A是一个数组(即内存地址),在 64 位机器上是 8 个字节。A[0]是一个整数,所以是 32 位/4 字节。当您执行sizeof(array)时,编译器实际上无法为您提供您所期望的标准响应,因为它没有大小(int[]vs int[size]`) -
@Tibrogargan
A是一个指针,而不是一个数组。 -
@Tibrogargan 你错了,
int[]和int*和函数参数是一回事。即使int A[10]也是一个指针。查看此问题的答案。 -
您正在比较
A和A[0]的大小,这通常可能不同,而不是像主题声称的那样,*A和A[0]的大小应该是相同的。此外,您需要使用%zu打印sizeof值。使用%d会调用未定义的行为。
标签: arrays c pointers implicit-conversion sizeof