gpt4 book ai didi

C++ 指针表达式和数组

转载 作者:行者123 更新时间:2023-11-30 01:57:15 25 4
gpt4 key购买 nike

int value = 5; 
int a[ ] = {2,4,6,9,3,5,7};
int *q1 = &value;
int *q2 = a;
int *q3 = &a[2];
int *p[ ] = { q1, q2, q3 };

cout<<p[0][0]<<" " <<p[1][1] <<" " <<p[2][3];

answer is 5 4 5.

我可以知道我怎样才能得到答案吗?我很困惑,感谢指导!

最佳答案

你需要知道的:

  1. 表达式 a[i]相当于*(a + i) , 所以表达式 a[i][j]相当于*(a[i] + j)这也等同于 *(*(a + i) + j) .

  2. 当您将数组名称分配给指针时,它会衰减到第一个元素地址的地址,例如:

     int a[ ] = {2, 4, 6, 9, 3, 5, 7}; 
    int *q2 = a;

    现在q2指向第一个元素 a[0] .

    也阅读一些 exceptions where array name not decaying into a pointer to first element? @H2CO3 巧妙地回答了.

  3. 当您添加 i 时指向指针 p它开始指向 i<sup>th</sup>元素位置来自 p地址。所以假设 id p指向数组中的第二个元素 p + 3指向数组中的第五个元素(类似的减法工作在相反的方向)。阅读10.2 Pointers and Arrays; Pointer ArithmeticPointer Arithmetic .

回答你的问题:在代码中:

int value = 5; 
// 0 1 2 3 4 5 6
int a[ ] = {2, 4, 6, 9, 3, 5, 7};
int *q1 = &value;
int *q2 = a; // address of array a decays into address of first element
int *q3 = &a[2];
int *p[ ] = { q1, q2, q3 }; // can be written as below

最后一行相当于:

int *p [] = { &value, a, &a[2]};

指针 Ppointer to int 的数组所以p[i]表示地址,p[i][j]是int值:

 p[0][0] == *(p[0] + 0) == *(&value + 0) ==  *&value == value  == 5
p[1][1] == *(p[1] + 0) == *(a + 1) == a[1] == 4
p[2][3] == *(p[2] + 3) == *(&a[2] + 3)
// 0 1 2 3 4 5 6
//int a[ ] = {2, 4, 6, 9, 3, 5, 7};
// +1 +1 +1
== that is value at 3rd location from index 2
== a[5] == 5
// When you add 1 to an address pointer start pointing to next location

@来自Dyp : 您可以将最后一个表达式理解为:
表达式 *(&a[2] + 3)定义为 *(&*(a+2) + 3) , 等于 *(a+5)a[5]相同:

 p[2][3] == *(p[2] + 3) == *(&a[2] + 3) == *(&*(a+2) + 3) 
== *((a+2) + 3)
== *(a + 2 + 3)
== *(a + 5) == a[5] == 5

希望这对您有所帮助。

关于C++ 指针表达式和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18942204/

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