在 C 语言中使用 *&*&p 了解复杂的指针和地址运算符
Understanding complex pointer and address-of operators using *&*&p in C
下面有人能解释printf是如何打印hello的吗?
#include<stdio.h>
void main()
{
char *p;
p="hello";
printf("%s",*&*&p);
}
我知道*&p…表示p中的值,即字符串"hello"的地址。在最初的*&
正如您所说,*&p
表示p
,即连续的*
和&
取消。因此CCD_ 5也变成了CCD_ 6。
正如@Kerrek(在评论中)所说,*&p
产生一个左值,所以你再次取其地址。
请注意,您的代码不符合标准。main()
必须将int
作为返回类型。并且不能将"hello"
分配给非常量char*
。必须是const char*
。符合标准的代码是:
#include<stdio.h>
int main()
{
const char *p = "hello";
printf("%s",*&*&p);
}
&p
是p
的地址。
CCD_ 15是由地址CCD_。
*&p
是*(&p)
——由地址&p
指向的东西——这就是p
本身(即,由地址"p的地址"指向的东西)。
因此,*&p
就是p
——*&
相互抵消。您可以重复这一点:*&*&p
仍然是p
。你可以无限次这样做:*&*&*&*&*&*&*&*&*&p
也将是p
。
'*&'相互抵消。您正在获取p的地址,然后再次取消对它的引用。所以最终结果将是p。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- 在 C 语言中使用 *&*&p 了解复杂的指针和地址运算符
- 有人可以向我解释一个复杂的函数指针类型吗C++
- 如何将复杂的指针数据作为属性放入qt-plugin-xml文件中
- 指针复杂度的排序向量
- 用指针解释复杂的类型定义
- 高级指针复杂的语法
- 复杂的指针表达式
- 函数调用-复杂的值和指针
- 如何在c++中优雅地使用智能指针来模拟复杂的生命周期
- 指向复杂<double>罪恶的指针
- 如何理解复杂的数组声明指针,以及
- 复杂设计中的Shared_ptr和逻辑指针所有权用例