C语言零碎知识点之定义指针时星号靠近类型名还是变量名
Posted 二木成林
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言零碎知识点之定义指针时星号靠近类型名还是变量名相关的知识,希望对你有一定的参考价值。
我们在C语言中定义指针时,星号到底是靠近类型名还是变量名有如下几种情况,并且都能够通过编译:
int * a;// 星号放在类型名和变量名之间
int* a;// 星号靠近类型名
int *a;// 星号靠近变量名
对于第二种情况,感觉强调的是变量a
是int*
类型的,对于a
是一个指针变量更加直观。但也会有一个问题,如:
int* a,b,c;
我们会误以为a
、b
和c
都是int*
类型的指针变量。但其实只有a
是指针变量,而b
和c
只是普通的int
类型的变量。
#include <stdio.h>
int main()
int* a,b,c;
int num=123;
a=#
b=#
c=#
printf("%d\\n",*a);
printf("%d\\n",*b);
printf("%d\\n",*c);
上面这段代码会报错,无法通过编译,表明int* a,b,c;
中只有a
是指针变量,而b
和c
是普通的`int``类型变量。
对于第三种情况,感觉强调的是*a
是int
类型的。如CLion的格式化就是使用的这种规范。看如下代码:
#include <stdio.h>
int main()
int num = 123;
int *a = #// 定义指针变量并且赋值
printf("%d\\n", *a);// 使用指针变量
*a = 456;// 其实*a等价于*&num
printf("%d\\n", *a);
但声明指针变量int *a=#
和使用指针变量*a
看起来似乎一样,容易产生误解,新手很容易绕进去,我就在这里绕了很久。
而对于星号的位置并没有准确的规范,完全是根据个人习惯来的,但在一个项目中最好统一成一种风格,便于阅读。
以上是关于C语言零碎知识点之定义指针时星号靠近类型名还是变量名的主要内容,如果未能解决你的问题,请参考以下文章