gpt4 book ai didi

c - *ptr 和 *(&ptr + 1) 的区别

转载 作者:太空狗 更新时间:2023-10-29 14:50:55 25 4
gpt4 key购买 nike

我不熟悉指针和指针的基础知识。我想知道两者之间的区别*ptr 和 *(&ptr + 1) 来自以下代码。

#include<stdio.h>
int main()
{
int a[3] = {1, 2, 3};
int *ptr = a;

printf("*ptr = %d\n",*ptr);
printf("&ptr = %p\n",&ptr);

printf("(&ptr + 1) = %p\n",(&ptr + 1));
printf("*(&ptr + 1) = %d\n",*(&ptr + 1));

return 0;
}

根据我的分析,gcc 产生了以下输出,

*ptr = 1    // as ptr = a, Ultimately *ptr will print the first value of array i.e. 1
&ptr = 0x7fffa7e97788 // Starting Address of array or address of first element
(&ptr + 1) = 0x7fffa7e97790 //address of next element in the array
*(&ptr + 1) = 1 // I want to know how this is getting dereffered

提前致谢。

最佳答案

&ptr是指针变量ptr的地址。该地址与数组地址无关。

*(&ptr + 1) 是未定义的行为,因为 &ptr + 1ptr 地址的一步。取消引用此类指针会产生未定义的行为。

您的意思可能是 *(ptr + 1)

关于c - *ptr 和 *(&ptr + 1) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27648952/

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