关于在C 语言中往函数里传递指针变量写法的困惑

下面两种写法

cvoid fun1(int* px,int* py)

cvoid fun2(int *px,int *py)

对于第一种我能很直观的感受到是要传递一个指针进去,但是第二种写法就感觉有点绕
假如px是一个指针,*px就应该是px对应的值了,为什么还要还是表示要传进来的是一个指针呢?

就是感觉到不习惯.

阅读 4.4k
5 个回答

这个的确是个奇怪的东西,通常的理解是这样的,对于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* pint *p完全是一码事,所以采用哪种写法其实对于程序执行是无所谓的,但是你必须要知道这样的写法是怎么来的,而且如果你能够理解的话,就会习惯写成int *p的样子了

看的是什么书,遇到这样的问题!在编译器看起来都一样,约定俗成的是第一种方法。

函数声明和定义的时候,两种写法都是一样的,不要纠结这种问题

建议写第二种吧,这样不容易写错

int *x,*y; int* x,* y;
int *x,y;  int* x,y;
int x,*y;  int x,* y; 

看你觉得怎么写不会混淆这三种定义了

新手上路,请多包涵

个人习惯。
推荐第二种。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进