&address

时间:2019-09-14 20:46:43

标签: c++ pointers

我正在学习C ++和指针,并且遇到了奇怪的发现。看一下这段代码:

#include <iostream>
using namespace std;

void test(int *address) {
    cout << address << endl; //prints the same address again
    cout << &address << endl; // this address is different
}

int main() {
    int m = 22;
    cout << &m << endl; //prints some address
    test(&m);
    return 0;
}

基本上,我在地址上使用&并进行打印。意外的是&addressaddress不同。 &address是什么意思?

2 个答案:

答案 0 :(得分:1)

  

&address是什么意思?

除了变量不同之外,它与&m的含义相同。 &是运算符的地址,&address是存储由标识符address命名的对象的内存地址。在示例中,&aa的存储位置。函数参数是局部变量。

此外,由于a是指向int的指针,所以指向a的指针的类型是指向int的指针,即int**

尽管该示例不涉及引用变量,但是请注意,当addressof运算符的操作数是引用时,结果将是所引用对象的地址。引用变量不是对象,也不一定根本没有内存地址。

答案 1 :(得分:0)

您有一个指向指针的指针。

是什么意思?这意味着我们可以更改传递给函数的指针,如下所示:

void test(int **a, size_t *n);
{
    *n = 4;
    *a = new int[4];
    a[0][0] = 123;
    a[0][1] = 64;
    a[0][2] = 32;
    a[0][3] = 16;
}

int main()
{
    size _t n; int *a;
    test (&a, &n);
    for (int i = 0; i < n; i++)
        cout << a[n] << endl;
    delete a;
}