*(&a)=5 是什么意思?
What does *(&a)=5 mean?
我正在研究指针。这很令人困惑——也许是因为我是新来的。我有一个问题,*(&a)
在下面的短节目中表示什么。
在第7行,我知道*(&a)
的意思是"变量a
地址处的值",但在第13行,*(&a)=5
的意思是什么?当我赋值&a=5
时,编译器会沿着"赋值的左操作数所需的左值"这行给出一个错误,但当我在*(&a)
中赋值时,它编译时没有错误。
#include <stdio.h>
int main()
{
int *p, a = 2, b;
b = *(&a); // line 7
printf("%d", b);
p = &a;
printf("%d", p);
*(&a) = 5; // line 13
printf("%d", a);
return 0;
}
给定一个int a;
,则&a
会为您提供a
的地址,即int *
。给定一个int *p;
,表达式*p
给出了p
所指向的int
。因此*(&a)
是a
地址后面的值,即a
。换句话说,CCD_ 18的作用与仅仅CCD_。
有时这是有用的。给定一个std::vector<int>::iterator it;
,您可以通过取消对迭代器的引用来获得指向迭代器所指向的int
的指针,以获得int
,然后获取地址,从而获得&(*it)
。
这在§5.3.1[expr.unary.op]:中有介绍
1一元*运算符执行间接:表达式它应该是指向对象类型的指针,或者指向函数类型,结果是引用对象的左值或表达式所指向的函数。如果表达式的类型是"指向T的指针",结果的类型是"T"。
和:
2以下每个一元运算符的结果都是一个prvalue。
3一元&运算符是指向其操作数的指针。
由于&a
产生prvalue
,因此&a = 5
无效,因为&a
不是左值。只有可修改的lvalues才能出现在内置赋值运算符的左侧。
另一方面,*(&a)
产生一个左值(使其可赋值)。
&a
将返回指向的指针,或a
所在的内存地址。解引用运算符*
返回由地址指向的数据的值。请考虑以下代码。
int foo = 3;
int* bar = &foo; /// bar points to foo.
printf( "%dn", *bar ); /// will print 3
printf( "%dn", *(&foo) ); /// will also print 3
变量CCD_ 32指向CCD_ 33所在的存储器地址。通过使用解引用运算符,可以获得存储在内存中bar
中包含的地址处的值。最后一个例子将两者结合在一起,您获得一个指向foo
的指针并立即取消引用它,它返回存储在foo
中的值
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思