关于#c语言#的问题:请问为什么会输出这样的内容

请问为什么会输出这样的内容

#include
int main()
{
    //c99语法支持
    //变长数组-数组的大小是变量
    int n = 9;
    int arr[n];
    int i = 0;
    for(i = 0;i < 9;i++)
    {
        arr[i] = i;
        printf("%d\n",arr);
    }
    return 0;
   

输出:
6421920
6421920
6421920
6421920
6421920
6421920
6421920
6421920
6421920

该回答引用ChatGPT

在这段代码中,输出的结果是 6421920 而不是数组中的值,是因为在 printf 函数中传递的是数组 arr 的地址,而不是数组元素的值。

更具体地说,代码中 printf 函数的第二个参数是 arr,它是一个指向数组第一个元素的指针。在 printf 函数中,使用 %d 格式符输出该指针所指向的整数值,这个整数值其实是数组的第一个元素的值,而不是整个数组的值。由于数组中的值是逐个赋值的,而指针地址是不变的,因此输出的结果是同一个地址上的值,即 6421920。

如果要输出数组中的值,可以使用下标操作符 [] 来访问数组元素,例如:

printf("%d\n", arr[i]);

这样就可以输出数组中的每个元素的值了。

printf("%d\n",arr);输出的是数组arr的首地址,应改为:printf("%d\n",arr[i]);