gpt4 book ai didi

c++ - 指向数组的指针是否指向数组的第一个元素

转载 作者:行者123 更新时间:2023-11-30 00:48:18 27 4
gpt4 key购买 nike

下面的代码显示了一个指向数组第一个元素的指针。ptr 显示它指向的地址,而 *ptr 打印地址处的值,这是预期的。

int arr[]={1,2};
int *ptr=arr; //same as int *ptr=&arr[0]
cout<<"\n\n";
cout<<"Value at "<<ptr<<"is "<<*ptr<<endl;

输出:

Value at 003CFB48is 1

在下面的代码中,指针指向一个包含 2 个元素的数组(而不是特别指向数组的一个元素)。但在这种情况下,取消引用指针会打印地址。ptr2 打印地址那么为什么*ptr2 打印地址处的值呢?

int arr2[]={3,4};
int (*ptr2)[2]=&arr2;
cout<<"Value at "<<ptr2<<"is "<<*ptr2<<endl; //Isnt *ptr2 supposed to print value at ptr?
cout<<"1st element is "<<**ptr2<<" and second is "<<*(*ptr2+1);

输出:

Value at 003CFB2Cis 003CFB2C
1st element is 3 and second is 4

编辑:如果 ptr 打印一个地址,*ptr 打印一些值,**ptr 打印第一个元素(除了我会然后发布了一个不同的问题:))我知道这里的 ptr2 指向一个数组而不是第一个元素,所以我可能需要使用 **ptr2 来打印第一个元素。这里的真正问题是,如果 ptr2 指向一些 地址,那么从语法上讲,为什么 *ptr2 不打印 that< 处的值/em> 地址。

最佳答案

虽然两个指针的数值相同,但是它们类型的不同使得解引用返回不同的东西:

  • 取消引用指向 int 的指针返回 int , 而
  • 取消引用指向 int 的指针两个元素的数组返回 int两个元素的数组。

当您传递运算符 << 时指向数组的取消引用指针,它获得指向该数组第一个元素的指针。在数值上,它是同一个指针,但它仍然是一个指针。这就是为什么 003CFB2C打印出来。

请注意表达式 *(*ptr2+1)没有增加多少值(value),因为 *优先级高于 + . 1 sis 添加到一个取消引用 ptr2 ,它的行为类似于指向 int 的指针.

正在尝试打印 *(*(ptr2+1)) , 但是,将是未定义的行为,因为它会指向 arr2 的末尾。 .这是一种演示添加 1 时会发生什么的方法。指向数组的指针:

int arr2[2][2]={{3,4},{5,6}};
int (*ptr2)[2]=&arr2[0];
cout<<"Value at "<<ptr2<<"is "<<*ptr2<<endl; //Isnt *ptr2 supposed to print value at ptr?
cout<<"1st element is "<<**ptr2<<" and second is "<<*(*(ptr2+1));

现在1st element is 3 and second is 5被打印( demo ),因为 ptr2+1指向下一个数组 int s,即 {5, 6} ,它的第一个解引用产生数组本身,它的第二个解引用产生初始位置的值。

关于c++ - 指向数组的指针是否指向数组的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32073036/

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