int * p和int * p之间的区别是什么

时间:2014-09-25 11:52:42

标签: c++ pointers int

我见过很多代码,他们使用int *来声明变量。我知道int*p声明了一个整数类型的变量,它是一个指针。但是int* p做了什么? 例如:

int* x,y,z;

这是否意味着所有三个变量都是指针?我们可以使用int *x,*y,*z代替吗?

2 个答案:

答案 0 :(得分:5)

  

int *pint* p之间有什么区别?

除了需要分隔令牌(它不在这里)之外,空格永远不会影响C ++代码的含义。两者的含义相同(int * pint*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指针。

如果您希望将yz视为int指针,则需要使用int *x,*y,*z

因此,在类型和星号之间使用空格可能是更好的编码约定。

就个人而言,我总是将指针变量声明为单独的行(每个变量一行)。