下面两种写法
c
void fun1(int* px,int* py)
和
c
void fun2(int *px,int *py)
对于第一种我能很直观的感受到是要传递一个指针进去,但是第二种写法就感觉有点绕
假如px
是一个指针,*px
就应该是px
对应的值了,为什么还要还是表示要传进来的是一个指针呢?
就是感觉到不习惯.
下面两种写法
c
void fun1(int* px,int* py)
和
c
void fun2(int *px,int *py)
对于第一种我能很直观的感受到是要传递一个指针进去,但是第二种写法就感觉有点绕
假如px
是一个指针,*px
就应该是px
对应的值了,为什么还要还是表示要传进来的是一个指针呢?
就是感觉到不习惯.
建议写第二种吧,这样不容易写错
int *x,*y; int* x,* y;
int *x,y; int* x,y;
int x,*y; int x,* y;
看你觉得怎么写不会混淆这三种定义了
1.2k 阅读
1 回答594 阅读
这个的确是个奇怪的东西,通常的理解是这样的,对于
int *p
表示申请了一个变量p,并且规定*p的类型是int,既然*p的类型是int,从而反推出p的类型是int指针;这样的理解有点违反直觉,但是很有助于理解C的指针,比如申请一个函数指针
void (*f)(int)
表示申请了一个名为f的,指向一个无返回值,带一个int参数的函数的指针;另外例如数组指针,譬如
int (*a)[5][6]
是指向一个三维数组的某两维的指针,必须使用如上的方式理解;另外还有就是
int *a,*b
表示*a和*b都是int类型的,即申请了两个指针,而在int *a,b
中表示*a和b是int类型,所以b是int而非指针;那么在C语言中,变量的定义是用
类型名 变量名
来定义的,在int *p
的定义中,既然变量名是p,那么其类型就自然是int *
咯不过编译器并不在意空格什么的东西,对于编译器来说,
int* p
和int *p
完全是一码事,所以采用哪种写法其实对于程序执行是无所谓的,但是你必须要知道这样的写法是怎么来的,而且如果你能够理解的话,就会习惯写成int *p
的样子了