我正在学习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;
}
基本上,我在地址上使用&并进行打印。意外的是&address
与address
不同。 &address
是什么意思?
答案 0 :(得分:1)
&address
是什么意思?
除了变量不同之外,它与&m
的含义相同。 &
是运算符的地址,&address
是存储由标识符address
命名的对象的内存地址。在示例中,&a
是a
的存储位置。函数参数是局部变量。
此外,由于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;
}