c++ - C++数组指针如何具有不同的位置,但指向相同的元素?

标签 c++ arrays pointers pointer-arithmetic

我知道保存数组的变量存储数组的地址,对其进行任何索引操作都在同一数组上执行指针算术。在修读基础知识的过程中,我发现了这一点。

int main() {
    int equal;
    char c[] = {'a', 'b', 'c'};

    char* p = c;
    char* q = &c[0];

    cout<<*p<<endl;
    cout<<*q<<endl;
    cout<<&p<<endl;
    cout<<&q<<endl;
    if (c==q) {
        equal=1;
    }
    cout<<equal<<endl;
}

//output
a
a
0x7ffda22e0a60
0x7ffda22e0a68
1
取消引用p,q给我相同的值,但是p,q的地址不同。这怎么可能?

最佳答案

分配数组时,该变量会将数组分配给指向该数组开头的位置。该数组的开头是内存中的地址。
数组开头的地址是其第一个元素的地址,因此无论您使用char *x = arr;还是char *y = &arr[0]都无关紧要;他们将是相同的。
现在xy已分配在堆栈上,并且是两个不同的变量,因此它们显然具有不同的地址。因此

&x == &y // false
编写T* x时,您要声明一个指向T类型的对象的指针。该指针x本质上是一个整数值,其中包含代表内存中地址的数字。

关于c++ - C++数组指针如何具有不同的位置,但指向相同的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64204001/

相关文章:

c++ - 为整数类型重载运算符 ^

javascript - 从数组的副本中删除一个项目而不从原始数组中删除它

ios - 在 DetailViewController 中的索引路径之间转换? swift

c - 指向 volatile 数据的自由指针

c++ - 访问一个字符串给出空值,即使它被赋值

c++ - 为什么在 C++ 封装时会出现此错误?

C++ Binary >> 没有找到采用右手操作数类型的 const char 错误的运算符

C++编译时错误: expected identifier before numeric constant

ruby - 如何删除数组中的空字符串

c - 指针分配与元素或结构分配有什么区别?