C++指针的小问题

strings("hello")string*p=&s这是指针指向了字符串S的首字母位置;而intarr[5]={1,2,3,4,5}int*p=arr;int*p2=p... string s("hello")
string *p=&s 这是指针指向了字符串S的首字母位置;

而int arr[5]={1,2,3,4,5}
int *p=arr;
int *p2= p +5; 这里指针P2指向数组的第5个元素的地址,为什么这里等式右端 不加 取地址操作符 &?
展开
 我来答
haiyangfenghuo
2014-10-17 · TA获得超过2439个赞
知道大有可为答主
回答量:2388
采纳率:0%
帮助的人:738万
展开全部
其实这里主要是为了考虑类型匹配。
string * p = &s,也许你已经知道,string也是通过指针封装的一个字符串类型,既然你又加了一层指针,当然需要用&表示对应的类型匹配。

int *p2= p +5;这里不需要取地址是因为p本身就代表了地址,p的类型是int*就是地址,而int* p2 = p左右的类型是一致的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bhtzu
2014-10-17 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:3838万
展开全部
因为p已经是一个指针,arr是数组,可以当做指针处理,而s自己不是一个指针,所以需要地址符&
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qinflying
2014-10-17 · 一个低调有内涵的技术人员
qinflying
采纳数:452 获赞数:1414

向TA提问 私信TA
展开全部
指针就是地址,所以不用取地址符
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fgeras
2014-10-17 · 超过24用户采纳过TA的回答
知道答主
回答量:75
采纳率:0%
帮助的人:48.2万
展开全部
p本身就是就是地址对不对,指针的作用就是指向某个地址。你可以试下输出改地址,例如cout<<p;则输出p指向的地址。cout<<*p;则输出的是改地址出存放的值。所以p+5就是在p本身的地址上,移动了5个地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友04610425c
2014-10-17 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:94
采纳率:0%
帮助的人:68.3万
展开全部
p本来就是地址指针所以不用加&
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式