cpp指针的定义

定义cpp指针的时候为什么是

int *p = &a;

而不是

int *p = a;

这个困惑的来源主要是因为指针定义分开写时是这样的:

int *p;
p = &a;

说明p才是指向地址的,但是在定义的时候为什么是用*p后面跟着&

阅读 3.4k
4 个回答

int *是类型,p是变量名
p的类型是int *
&a的类型也是int *
所以它们才能写在赋值号两端。

int *p = &a;: 从右往左读, p is a pointer to int. 所以p是一个指向int的指针, 而&在这里是一个取址操作符, 不过需要注意的是, 表达式&a返回的其实不是地址, 而是一个指针(虽然包含了地址信息), 而如果你写int *p = a;, 右边依然是个int, 而不是一个pointer, 因此自然是不对的写法. 如果有人跟你说pointer其实就是一个int, 这么做只是有时候hack方便些罢了. 你现在不用理会, pointer是c++标准中的一个类型, 虽然是derived type.

int *p = &a;其实声明的是p(类型上段开始说了), 并且直接赋值了. *p才是一个int类型, 我再举一个例子你就明白了, int *p, q;这里声明了俩个变量, p是int*, 即pointer to int, 即int指针, q则是int.

指针指向的是一个地址,你如果不是&地址符号,那就失去了其意义所在

新手上路,请多包涵

int *p = &a中,a是一个变量,p前加了一个*说明是一个指针(也就是保存一个地址),一个变量可以赋值给一个地址型的p吗?显然是不可以的,这时候就要在a前加一个取地址符&,取出变量的地址,在进行赋值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题