每个指向/取消引用语法使变量意味着什么?
What does each depointer/dereference syntax make the variable mean?
编辑:由于int * x
,int* x
和int *x
之间没有区别,我删除了该部分以更好地澄清我的困惑。
问题:
"指针"和"引用"之间的区别在回答中解释了指针变量和引用C++变量之间的区别是什么?,但语法本身似乎根据上下文具有不同的含义。
声明指针或引用时,*
和&
修饰符稍后使这些变量表示什么? 它们是指针、原始值、对象引用等。
例如,由于文字似乎在这里让我失望:
void foo(int* x, int& y) {
assert(*x == ??);
assert(&x == ??);
assert(*y == ??);
assert(&y == ??);
}
这方面的规则非常简单。 无论您在哪里看到声明,如果它在main
、some_namespace
、 类内或函数的参数部分中,声明的含义都是一样的。 知道这一点,每当你看到
type_name * variable_name
您正在声明一个指针。 无论您在哪里看到
type_name & variable_name
您正在声明引用。 这里的间距无关紧要,int* foo
、int * foo
和int *foo
都声明了一个名为foo
的int*
。 这里唯一棘手的一点是*
或&
适用于变量名称,而不是类型。 这意味着在代码中,例如
int * foo, bar;
foo
和bar
并不是两个指针。foo
是指向int
的指针,而bar
只是一个int
。 要制作bar
和int
您需要使用
int * foo, * bar;
这照顾了声明。
供您使用,如果您看到
*variable_name
然后你通过variable_name
进行间接(调用一元operator*
)。 如果您看到
&variable_name
然后你得到variable_name
的地址,或者调用variable_name
类型的operator&
。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 将包含C样式数组的对象初始化为成员变量(C++)
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 此CMAKE错误意味着什么?我的变量设置为未发现
- 变量大小取决于语言机器实现,这意味着什么
- [=]是否意味着所有的局部变量都将被复制?
- 静态变量对于各种编程语言和环境通常意味着什么