这个问题很愚蠢,但我就是想不出来,而且chatGPT每次回答都自相矛盾。为什么、何时:
int array[4] = {1, 2, 3, 4};
int *p = array;
int x = (*p++)++;
我明白了array[4] = {2,2,3,4}
毕竟,根据一元运算符的逻辑,所有内容都应该从右向左读取。看起来解引用的优先级更高,但是为什么int x = (*p++)
写的时候会先发生移位,然后解引用呢?
这个问题很愚蠢,但我就是想不出来,而且chatGPT每次回答都自相矛盾。为什么、何时:
int array[4] = {1, 2, 3, 4};
int *p = array;
int x = (*p++)++;
我明白了array[4] = {2,2,3,4}
毕竟,根据一元运算符的逻辑,所有内容都应该从右向左读取。看起来解引用的优先级更高,但是为什么int x = (*p++)
写的时候会先发生移位,然后解引用呢?
int array[5]{1,24,5,61,4}
int *p = array + 2
为什么我得到的是数组元素而不是它的内存地址?毕竟,上面的条目相当于 (= &array + 2),我提前为这个愚蠢的问题道歉,我是优点的新手,我真的很想理解指针。在代码中,您可以自由地将 p[0] 作为数组引用,并相应地对其进行操作。但我不明白为什么在这个调用中我得到一个数组元素,而不是它在内存中的地址,如果我不取消引用它。
当通过seaout输出时,我得到一个地址,为什么结果与指针不同?毕竟,我得到了 int* (地址类型),但是然后是 p[0],我不会以任何方式取消引用它。抱歉,如果我废话太多,我可能理解不了很多,因此思考不正确。
std::cout << array + 2 << std::endl;