gpt4 book ai didi

c - 我们如何找到以下 C 程序的输出?

转载 作者:太空狗 更新时间:2023-10-29 15:11:29 26 4
gpt4 key购买 nike

我在 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。这是我对这段代码的解释:

  1. 首先,main 函数会运行,其中在声明数组“arr”后,将执行包含语句 fun(arr) 的下一条语句。
  2. 在该语句中,将使用参数 arr 调用函数“fun”,该参数包含数组第一个元素的地址。
  3. 之后,在函数fun下,有一个指针ptr作为参数。执行此函数时,n 的值将计算为 1,因为此处 ptr 的大小为 4,ptr[0] 的大小也为 4。
  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,为 n 生成 2 的值。这取决于(并随着)您的环境和使用的实现而变化。

尝试单独打印它们,例如

  • printf("指针大小:%zu\n", sizeof(ptr));
  • printf("元素大小:%zu\n", sizeof(ptr[0]));

亲眼看看。

关于c - 我们如何找到以下 C 程序的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44008402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com