gpt4 book ai didi

c - intt *p=a 和 int *p1=&a 之间的区别

转载 作者:行者123 更新时间:2023-11-30 20:58:22 25 4
gpt4 key购买 nike

a 为数组。 a[] = {1,2,3,4,5}

int *p=a+1;  
int *p1=&a+1;
printf("%d\n%d",*(p-1),*(p1-1));

为什么上面的输出是:

1  
5

int *p = aint *p1 = &a 有什么区别?

最佳答案

a + 1 中,a 降级为指向其第一个元素(int*)的指针,然后加一得到一个指针到 a[1],因为它根据指针所指向的内容(int)的大小来调整指针。

&a + 1中,&a获取一个指向a全部的指针;它是一个 int(*)[5](即指向五个 int 数组的指针),起始地址与 a[0] 相同,并添加 1 来调整指针所指向内容的大小(将其移动五个 int),使其有效地指向 a[5];然后,当您将其分配给 p1(即 int*)时,它会降级为 int*

之后,每个减一,因此 p - 1 返回一个 int 并指向 a[0],而p1 - 1 也返回一个 int,但是从 a[5] 的起点开始,所以它指向 a[ 4]。因此,取消引用 p - 1 会获取数组中的第一个元素,而取消引用 p1 - 1 则会获取最后一个元素。

关于c - intt *p=a 和 int *p1=&a 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52959030/

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