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)
比 *
.
绑定得更紧密
好吧,我迷失在这些指针中,有人可以确切地告诉我 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)
比 *
.