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

What is the difference between char * x,y,z;char* x,y,z;char (*)x,y,z;?

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

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

这两条记录

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 );

如果您问这个问题,可能是因为您正在寻找一种 shorthand 方法来将 x、y 和 z 全部声明为指向字符的指针。

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

char *x, *y, *z;

在您经常使用它的更复杂的情况下,您可以使用 typedef:

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

按照您将要使用它们的方式声明变量。

char *x, y, z;

*x 是一个字符,y 是一个字符,z 是一个字符。所以 x 是一个指向字符的指针。

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

f*g 是没有参数或 return 值的函数。所以 g 是指向这样一个函数的指针。 *g 两边的括号是必需的,因为 (void)*.

绑定得更紧密