gpt4 book ai didi

c - 关于C中数组名和数组地址

转载 作者:行者123 更新时间:2023-12-02 08:56:42 25 4
gpt4 key购买 nike

我有以下代码:

#include<stdio.h>

void main()
{
int * a;
int arr[2];
arr[1] = 213 ;
arr[0] = 333 ;
a = &arr ;
printf("\narr %d",arr);
printf("\n*arr %d",*arr);
printf("\n&arr %d",&arr);

printf("\n%d",a[1]);
}

运行这个简单的程序时,我得到的输出如下:

arr -1079451516
*arr 333
&arr -1079451516
213

为什么 arr 和 &arr 给出相同的结果?我可以理解 arr 是某个内存位置,而 *arr 或 arr[0] 是存储在该位置的值,但为什么 &arr 和 arr 相同?

最佳答案

几乎每次使用数组类型的表达式时,它都会立即“衰减”为指向第一个元素的指针。 arr 变成一个 int* 类型的指针,这个指针是实际传递给 printf 的指针。 &arr 是一个 int (*)[2] 类型的指针(指向两个 int 数组的指针)。这两个指针具有相同的地址,因为它们都指向数组的开头。

(数组到指针转换的一个值得注意的异常(exception)是 sizeof 参数。)

关于c - 关于C中数组名和数组地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4340465/

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