Q
混淆引用操作
1
A
回答
2
int i = 1;
int *p = &i;
的*
是声明的语法的一部分。 int *p
表示p
的类型为int*
。
i = *p;
这*
是一个引用操作。
但是,两者使用相同的语法并不是巧合。 C的(看似怪异的)声明语法主要基于“声明遵循使用”的原则。阅读声明
int *p;
的方法之一是,它宣称*p
是int
类型。由此可见,p
的类型为int*
。同理:
int *a, b, c[20];
说*a
,b
和c[blah]
都是int类型,所以a
是int*
类型,b
是int
类型,c
是int[20]
型。 (请注意,声明和使用之间的对应关系是不完美的; c[20]
是刚刚过去的数组的末尾,而实际上并不存在。)
这就是为什么(思想至少在一所学校)的*
在指针声明旁边是标识符,而不是类型。
4
6
这是一个指向声明的例子:
int *p = &i;
这是一个引用操作的例子:
i = *p;
运算符只适用于变量,不适用于类型,它们不是一回事。
+1
这不仅是*指针声明*;它更多。它是*指针定义和初始化*。 – Nawaz
1
这是一个指针声明,而不是解除引用操作符。
我想强调的是,星号(*),我们当 声明指针只使用意味着它是一个指针(这是它的 型复合符的一部分),并且不应该与我们之前看到的 解引用运算符相混淆,但它也是用星号(*)编写的 。他们只是两个不同的东西用相同的符号表示。
0
要以这种方式
int *p = &i;
是有点难以理解定义指针。我建议你使用这个(注意空格)
int* p = &i;
但会有这样的方式确定一个以上的指针时的一个问题:
int* p = &i, * q = NULL;
所以比较清楚,先定义指针类型,并使用该类型来定义变量:
typedef int* int_ptr;
int_ptr p = &i, q = NULL;
相关问题
- 1. 引用混淆
- 2. 引用混淆DLL
- 3. JavaScript`var`关键字的混淆操作
- 4. C++ - 操作员删除混淆
- 5. 混淆$操作符和括号
- 6. F#操作符/函数混淆
- 7. 混淆引用和指针
- 8. C#类作用域混淆
- 9. 混淆索引视图
- 10. numpy布尔索引混淆
- 11. 再次引发混淆
- 12. LIBGDX earclippingtriangulator混淆了索引
- 13. 索引混淆堆栈LIFO
- 14. SQLServer2008:混淆或混淆
- 15. fileno和引用弱化混淆
- 16. 自动引用计数混淆
- 17. 混淆PHP 7引用次数
- 18. 混淆使用
- 19. .htaccess不工作和混淆
- 20. 麻烦制作混淆
- 21. onCreate()工作流混淆
- 22. 混淆:制作file-min.js?
- 23. 混淆的`===`和`工作===`
- 24. 混淆
- 25. 使用proguard混淆
- 26. Substring()使用混淆
- 27. dealloc调用混淆
- 28. CUDA OpenGL互操作,资源映射混淆缓冲区
- 29. Sqlite数据库多线程SELECT和UPDATE操作混淆
- 30. 混淆为什么CSS不起作用
这是我更喜欢“int * p”语法而不是“int * p”的原因之一。 –