char * x,y,z; char * x,y,z; char(*)x,y,z ;?之间有什么区别?

时间:2015-02-26 05:15:55

标签: c pointers char

好的,我迷失在这些指针中,有人可以确切地告诉我char * x,y,z;char* x,y,z;char (*)x,y,z;之间的区别是什么?如果可以,请为您的答案提供资源。

4 个答案:

答案 0 :(得分:2)

前两个意思相同。它们将x声明为指向char的指针,将y和z声明为char变量。第三个将导致语法错误,并且正如@danielfranca在注释中指出的那样,将无法编译。

答案 1 :(得分:2)

这两条记录

char * x,y,z; 
char* x,y,z;

相同且相当于

char *x;
char y;
char z;

考虑到这些声明是等效的

char*x;
char* x;
char * x;
char *x;

它们都将变量x声明为char的指针。

此记录

char (*)x,y,z;

无效,不会被编译。

我认为你的意思是以下

char (*x),y,z;

在本案例声明中

char ( *x );

相当于

char *x;

您可以在括号中附上声明者。所以你可以写上面的记录,如

char ( *x ), ( y ), ( z );

答案 2 :(得分:2)

如果您提出这个问题,可能是因为您正在寻找一种简单的方式来声明x,y和z都是字符的指针。

在大多数情况下,你应该清楚一点:

char *x, *y, *z;

在更常见的情况下,您可以使用typedef:

typedef char *cp_t;
cp_t x, y, z;

答案 3 :(得分:2)

以与您将使用它们相同的方式声明变量。

char *x, y, z;

*x是char,y是char,z是char。所以x是指向char的指针。

void f(void), (*g)(void);

f*g是没有参数或返回值的函数。所以g是指向这样一个函数的指针。需要*g左右的括号,因为(void)的绑定比*更紧密。