如果您有以下代码:
int b = 10;
int* a = &b;
std::cout << a << " " << &a << " ";
结果是地址不同。
但是指针的地址有什么意义呢?
指针的值是变量的地址,因为我们在内存中有一个变量。但我们没有将地址的值存储在内存中,那么为什么我们要有地址的地址呢?
也许我有些误解,感谢您的帮助。
int b = 10;
int* a = &b;
std::cout << a << " " << &a << " ";
结果是地址不同。
但是指针的地址有什么意义呢?
指针的值是变量的地址,因为我们在内存中有一个变量。但我们没有将地址的值存储在内存中,那么为什么我们要有地址的地址呢?
也许我有些误解,感谢您的帮助。
记住,您机器上的地址本身将是一个32位或64位的值(取决于您的系统结构)。
在您的示例中,您有存储值为10的整数b,让我们称其为地址500
然后您有一个指针a,它存储值500,并且它有自己的地址。
重点是什么?您实际上可以有双指针(甚至更多)。
您了解到,在...
char* string = "hello";
字符串是指向字符数组开头的指针。
然后,
char** strings;
这是一个指向char*的指针。举个例子,这就可以用于数组的数组。
std::cout << a << " " << &a<<" ";
int b=9;
b
,将会得到它的值即9
,但是如果您打印&b
,您将得到它的地址,并且这两者在任何情况下都不相同。int
, char
),这些都在程序中声明并存储在内存中。因为它们存储在内存中,它们有唯一的地址。指针的值是变量的地址
我假设你所说的变量指的是对应于变量的对象。然而,这并不完全正确,当我们开始区分地址和指针值时,就会涉及到一些边缘情况。
有一些指针值根本不指向对象。例如,考虑空指针。
按照定义,地址确实指向对象……或函数。
指针的地址是什么意思?
如果你能想象一个声明用于存储指针的变量(例如T *var;
),并且你取它的地址(&var
),那么指针的地址这个术语就有了意义。
那么为什么我们需要一个地址的地址呢?
地址是一种指针值,但指针值不指向值;它们指向对象或函数。&a
与a
不同,因为这两个指针指向不同的对象;一个指向a
,另一个指向b
。
谢谢大家,我知道问题出在哪里了。
实际上,我通过 int* a = &b;
在内存中创建了一个指针,但我认为我没有这样做,所以这是我的错误。
但我认为你不能输出不存在于内存中的东西的地址,比如 cout<<&(&a)
,编译器会告诉你 "&" 运算符需要一个左值变量。
如果你想输出指向 a 的指针的地址,你需要定义一个指向指针的变量 int **p2p=&a
,然后你可以使用 cout<<&p2p
,它可以正常工作。
a
和b
都是存储在内存中的变量。这两个变量都有各自的内存地址。 - Colonel Thirty Twostd::cout
不应该出现在一个 C 语言问题中。你是否使用的是 C++ 编译器?如果是,那么这就是一个 C++ 问题。 - autistic