我们在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
看起来似乎一样,容易产生误解,新手很容易绕进去,我就在这里绕了很久。
而对于星号的位置并没有准确的规范,完全是根据个人习惯来的,但在一个项目中最好统一成一种风格,便于阅读。