代码:
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,并且在这个上下文中,它们都是正确的。