我找到了以下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;
}
此代码的输出为&#34; 1 2 &#34;。但据我说,输出应该只是 1 。以下是我对此代码的解释:
请帮我弄清楚我错在哪里。
答案 0 :(得分:10)
- [....]
n
的值将计算为1
,因为此处ptr
的大小为4
,且大小为ptr[0]
{1}}也是4
。
嗯,这很常见,但无法保证。
sizeof(ptr)
很可能导致8
,这可能是您的情况,而sizeof(int)
可以评估为4
,结果为{{1}对于2
。这取决于(并随之改变)您的环境和使用的实施。
尝试单独打印,例如
n
printf("Pointer size :%zu\n", sizeof(ptr));
亲眼看看。
答案 1 :(得分:7)
现代平台上指针的大小通常为4或8个字节。
在32位平台上,可能是sizeof(ptr) == 4
和n == 1
在64位平台上,可能是sizeof(ptr) == 8
和n == 2
。