定义cpp指针的时候为什么是
int *p = &a;
而不是
int *p = a;
这个困惑的来源主要是因为指针定义分开写时是这样的:
int *p;
p = &a;
说明p才是指向地址的,但是在定义的时候为什么是用*p后面跟着&
定义cpp指针的时候为什么是
int *p = &a;
而不是
int *p = a;
这个困惑的来源主要是因为指针定义分开写时是这样的:
int *p;
p = &a;
说明p才是指向地址的,但是在定义的时候为什么是用*p后面跟着&
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前加一个取地址符&,取出变量的地址,在进行赋值
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.3k 阅读✓ 已解决
3 回答3.5k 阅读
3 回答527 阅读✓ 已解决
1 回答3.3k 阅读
1 回答3.3k 阅读
int *
是类型,p
是变量名p
的类型是int *
&a
的类型也是int *
所以它们才能写在赋值号两端。