好的,我迷失在这些指针中,有人可以确切地告诉我char * x,y,z;
,char* x,y,z;
和char (*)x,y,z;
之间的区别是什么?如果可以,请为您的答案提供资源。
答案 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)
的绑定比*
更紧密。