代码:
int a = 10;
int *b = &a;
printf(“%d\n”, a);
printf(“%d\n”, &a);
printf(“%d\n”, b);
printf(“%d\n”, *b);
结果:
10
6487620
6487620
10
问题:
为什么前面设的 * b =&a,
但 * b 输出值是10,&a输出值是6487620。
正确含义的写法是否该是int* b(知道int *b也能实现)
代码:
int a = 10;
int *b = &a;
printf(“%d\n”, a);
printf(“%d\n”, &a);
printf(“%d\n”, b);
printf(“%d\n”, *b);
结果:
10
6487620
6487620
10
问题:
为什么前面设的 * b =&a,
但 * b 输出值是10,&a输出值是6487620。
正确含义的写法是否该是int* b(知道int *b也能实现)
引自免费微信小程序:皆我百晓生
在C++中,&
运算符用于获取变量的地址,而*
运算符用于访问指针所指向的内存中的值。让我们逐步解析您提供的代码和输出结果。
首先,我们定义了一个整型变量 a
并赋值为10:
int a = 10;
接下来,我们创建了一个整型指针变量 b
,并将其指向 a
的地址:
int *b = &a;
这里,&a
是 a
变量的地址,它是一个内存位置,例如 6487620
(这只是一个示例数值)。我们将这个地址赋给了指针变量 b
。
然后我们开始打印不同的值:
a
时,实际上你在打印变量 a
的值,即 10。&a
时,你得到的是 a
变量的地址,也就是内存位置,这是正常的,因为你明确地请求了地址。b
时,你实际上是打印指针变量 b
自身,而不是它所指向的值。由于 b
指向 a
的地址,所以它的值也是 6487620
,与之前的 &a
输出相同。*b
时,你是在通过指针 b
访问其指向的值,也就是 a
变量的值,因此输出是 10。总结一下,正确的理解应该是这样的:
a
和 *b
都代表变量 a
的值,即 10。&a
和 b
分别表示变量 a
的地址,即内存位置,比如 6487620
。如果你想确保指针变量的声明更加清晰,可以这样写:
int *b = &a; // 这里的 int *b 可以省略,因为 C++ 可以推断出指针类型
这是因为在 C++ 中,如果初始值是某个变量的地址,那么编译器会自动推断出指针的数据类型。所以,int *b
等同于 b
,并且在这个上下文中,它们都是正确的。