我见过很多代码,他们使用int *来声明变量。我知道int*p
声明了一个整数类型的变量,它是一个指针。但是int* p
做了什么?
例如:
int* x,y,z;
这是否意味着所有三个变量都是指针?我们可以使用int *x,*y,*z
代替吗?
答案 0 :(得分:5)
int *p
和int* p
之间有什么区别?
除了需要分隔令牌(它不在这里)之外,空格永远不会影响C ++代码的含义。两者的含义相同(int * p
和int*p
);间距纯粹是品味问题。
这是否意味着所有三个变量都是指针?
不,只有第一个是指针。在这种情况下,间距有点误导,因此有些人更愿意使关联更清晰:
int *x, y, z;
或者更好的是,不要尝试在单个声明中声明多个类型的变量:
int * x;
int y,z;
如果你想让它们全部成为指针,那么你必须为每个指定它:
int *x, *y, *z; // adjust spacing to taste
答案 1 :(得分:1)
有两种方法可以看到""变量p
:
您可以将p
视为int*
类型的变量。
您可以将*p
视为int
类型的变量。
因此,有些人会声明int* p
,而其他人会声明int *p
。
但事实是这两个声明是相同的(空格毫无意义)。
您可以使用p
作为指向整数值的指针,或使用*p
作为实际指向的整数值。
假设p
指向有效的内存地址,并且取决于访问权限:
您可以获取(读取)指向的数据,例如int c = *p
。
您可以设置(写入)指向的数据,例如*p = 5
。
在同一行上声明多个变量时,编译器会假定类型没有星号。
因此,对于int *x,y,z
,只有x
被视为int
指针。
如果您希望将y
和z
视为int
指针,则需要使用int *x,*y,*z
。
因此,在类型和星号之间使用空格可能是更好的编码约定。
就个人而言,我总是将指针变量声明为单独的行(每个变量一行)。