我们如何找到以下 C 程序的输出?
How do we find the output of the following C program?
我在 GeeksforGeeks 上找到了以下 C 程序的输出。这是程序:
#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;
}
这段代码的输出是“1 2”。但根据我的说法,输出应该只是 1。这是我对这段代码的解释:
- 首先,主函数将运行,其中在声明数组"arr"后,将执行包含语句fun(arr)的下一条语句。
- 在该语句中,将使用参数 arr 调用函数 "fun",该参数包含数组第一个元素的地址。
- 之后,函数fun下,有一个指针ptr作为参数。当这个函数执行时,n 的值将被计算为 1,因为这里 ptr 的大小是 4,ptr[0] 的大小也是 4.
- 接下来,循环将只运行一次,因为 n 的值为 1,这就是为什么只有 '1' 会被打印,因为它是 ptr[0] 的值。
请大家帮我找出错误的地方。
- [....] the value of
n
will be calculated as 1
since here the size of ptr
is 4
and the size of ptr[0]
is also 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
。
我在 GeeksforGeeks 上找到了以下 C 程序的输出。这是程序:
#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;
}
这段代码的输出是“1 2”。但根据我的说法,输出应该只是 1。这是我对这段代码的解释:
- 首先,主函数将运行,其中在声明数组"arr"后,将执行包含语句fun(arr)的下一条语句。
- 在该语句中,将使用参数 arr 调用函数 "fun",该参数包含数组第一个元素的地址。
- 之后,函数fun下,有一个指针ptr作为参数。当这个函数执行时,n 的值将被计算为 1,因为这里 ptr 的大小是 4,ptr[0] 的大小也是 4.
- 接下来,循环将只运行一次,因为 n 的值为 1,这就是为什么只有 '1' 会被打印,因为它是 ptr[0] 的值。
请大家帮我找出错误的地方。
- [....] the value of
n
will be calculated as1
since here the size ofptr
is4
and the size ofptr[0]
is also4
.
嗯,这很常见,但不能保证。
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
。