我找到了以下C程序的输出,我在GeeksforGeeks上找到了它.这是程序:
#include <stdio.h>
void fun(int ptr[])
{
int i;
unsigned int n = sizeof(ptr)/sizeof(ptr[0]);
for (i=0; i<n; i++)
printf("%d ", ptr[i]);
}
// Driver program
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
fun(arr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码的输出为" 1 2 ".但据我说,输出应该只有1.以下是我对此代码的解释:
请帮我弄清楚我错在哪里.
Sou*_*osh 10
- [....]的值
n
将被计算为,1
因为这里的大小ptr
是4
和大小ptr[0]
也是4
.
嗯,这很常见,但不能保证.
sizeof(ptr)
很可能是,导致8
,这很可能是你的情况,同时sizeof(int)
可估算4
,造成的价值2
的n
.这取决于(并随之改变)您的环境和使用的实施.
尝试单独打印,如
printf("Pointer size :%zu\n", sizeof(ptr));
printf("Element size: %zu\n", sizeof(ptr[0]));
并亲眼看看.
现代平台上指针的大小通常为4或8个字节.
在32位平台上,很可能是sizeof(ptr) == 4
和n == 1
.
在64位平台上,很可能是sizeof(ptr) == 8
和n == 2
.