如果我们有代码:
int b = 10;
int* a = &b;
std::cout << a << " " << &a << " ";
结果,地址不同。
但指针的地址含义是什么?
指针具有变量地址的值,因为我们在内存中有变量。但是我们没有存储在内存中的地址值,为什么我们有地址的地址呢?
也许我有一些误解,谢谢你的帮助。
答案 0 :(得分:3)
std::cout << a << " " << &a<<" ";
是的,两者都不同。
1。 a
已分配b
的地址,因此会打印b
的地址。
2。 &a
打印指针a
本身的地址。
而a
和b
的地址不同。
与此示例类似(理解) -
int b=9;
如果您打印b
,则会获得其值9
,但如果您打印&b
,则会获得其地址,而且它们不会相同。
指针的情况也是如此。
指针具有变量地址的值,因为我们在内存中有一个变量。但是我们没有存储在内存中的地址值,为什么我们有地址的地址?
我们声明一个变量(指针,数组,只是int
,char
)这些变量都在程序中声明并存储在内存中。由于它们存储在内存中,因此它们具有唯一的地址。
答案 1 :(得分:3)
请记住,您机器上的地址本身就是32或64位值(取决于您的系统架构)。
在您的示例中,您有一个整数b,它将值10存储在某个地址中,让我们将其称为地址500
然后你有一个指针a,它存储值500,IT有自己的地址。
重点是什么?你实际上可以有双指针(或更多)。
你理解
char* string = "hello";
string是指向字符数组开头的指针
然后
char** strings;
是指向char *的指针。例如,这就是你如何做一个阵列数组。
答案 2 :(得分:1)
指针具有变量地址的值
我假设变量表示与变量对应的对象。尽管如此,这并不完全正确,而且我们开始在地址和指针值之间进行区分是边缘条件。
指针值根本没有指向对象。例如,考虑空指针。
根据定义,地址指向对象......或函数。
指针地址的含义是什么?
如果您可以想象一个声明存储指针的变量(例如T *var;
)并且您获取它的地址(&var
,那么指针的地址是有意义的)。
为什么我们要有地址?
地址是一种指针值,但指针值不指向值;他们指向对象或功能。 &a
与a
不同,因为两个指针指向不同的对象;一个点位于a
,其他点位于b
。
答案 3 :(得分:0)
谢谢你,我知道它有什么问题。
事实上我在int* a = &b;
内存中创建了一个指针,但我认为我不是这样,这是我的错误。
但我认为你不能输出内存中不存在的东西的地址,如cout<<&(&a)
,编译器会告诉你“&amp;”运算符需要一个l值变量。
如果你想将指针的地址输出到a,你可以定义指向变量int **p2p=&a
的指针,然后你可以cout<<&p2p
,它可以工作。