C语言零碎知识点之定义指针时星号靠近类型名还是变量名

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言零碎知识点之定义指针时星号靠近类型名还是变量名相关的知识,希望对你有一定的参考价值。

我们在C语言中定义指针时,星号到底是靠近类型名还是变量名有如下几种情况,并且都能够通过编译:

int * a;// 星号放在类型名和变量名之间
int* a;// 星号靠近类型名
int *a;// 星号靠近变量名

对于第二种情况,感觉强调的是变量aint*类型的,对于a是一个指针变量更加直观。但也会有一个问题,如:

int* a,b,c;

我们会误以为abc都是int*类型的指针变量。但其实只有a是指针变量,而bc只是普通的int类型的变量。

#include <stdio.h>

int main() 
    int* a,b,c;
    int num=123;
    a=&num;
    b=&num;
    c=&num;
    printf("%d\\n",*a);
    printf("%d\\n",*b);
    printf("%d\\n",*c);

上面这段代码会报错,无法通过编译,表明int* a,b,c;中只有a是指针变量,而bc是普通的`int``类型变量。

对于第三种情况,感觉强调的是*aint类型的。如CLion的格式化就是使用的这种规范。看如下代码:

#include <stdio.h>

int main() 
    int num = 123;
    int *a = &num;// 定义指针变量并且赋值
    printf("%d\\n", *a);// 使用指针变量

    *a = 456;// 其实*a等价于*&num
    printf("%d\\n", *a);

但声明指针变量int *a=&num;和使用指针变量*a看起来似乎一样,容易产生误解,新手很容易绕进去,我就在这里绕了很久。

而对于星号的位置并没有准确的规范,完全是根据个人习惯来的,但在一个项目中最好统一成一种风格,便于阅读。

以上是关于C语言零碎知识点之定义指针时星号靠近类型名还是变量名的主要内容,如果未能解决你的问题,请参考以下文章

c语言中的星号“*” 都有啥作用,含代码提问 求帮忙读一行程序

c语言中如何将结构中变量清空

c语言如何将两个变量关联起来

C语言篇No2指针变量

指针概念

C语言指针定义