c++Primer 练习

qq_40162781 2019-09-07 11:23:40
2.28说明下面的这些定义是说明意思,调出其中不合法的

(a) int i, * const cp; (b) int *p1, * const p2;
2.29假设已有上一个练习中定义的那些变量,则下面的哪些语句是合法的?请说明原因

   (e)p2=p1;


第2.29题我看了网上的答案大部分都说是错的,并且原因是p1指向的对象可能会发生变化


但是我觉的这段赋值只要是初始化就是对的啊


int i=42;
int *p1=&i, * const p2=p1;
这里p1只是将它指向的对象给p2,之后p1指向哪里都跟p2没有关系了


有人能帮我解答困惑吗?



...全文
41 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
一见 2019-09-07
  • 打赏
  • 举报
回复
示例: int* p1; const int* p2; int* const p3; 语法规则: const修饰它后面的,因此: 1) p2的是修饰int*,结果是p2指向的内存不能改,但指向可以改; 2) p3的是修饰p3,结果是p3指向不能改,但指向的内存可以改。 可以体验下段代码,被注释部分违反语法规则:
#include <stdio.h>
int main() {
  int m = 3;
  int n = 5;
  int* p1 = &m;
  const int* p2 = &m;
  int* const p3 = p1;
  p2 = &n;
  *p3 = 2;
  //*p2 = 2;
  //p3 = &n;
  return 0;
}
uouo88 2019-09-07
  • 打赏
  • 举报
回复
对于这种和网上认识不一致的,拿出编译器,试一下,不要被别人误导,就算是primer书上写的,也不见得一定都是对的,抱着怀疑的态度去学习~
qq_40162781 2019-09-07
  • 打赏
  • 举报
回复
这题我觉得是很简单的了。。但是跟网上几乎所有答案都是不一样的,所以来问一下
uouo88 2019-09-07
  • 打赏
  • 举报
回复
引用 2 楼 的回复:
引用 1 楼 uouo88 的回复:
何不上机试一下?
我这样赋值,是编译通过的


那就是OK的撒
qq_40162781 2019-09-07
  • 打赏
  • 举报
回复
引用 1 楼 uouo88 的回复:
何不上机试一下?
我这样赋值,是编译通过的
uouo88 2019-09-07
  • 打赏
  • 举报
回复
何不上机试一下?

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧