关于数组和指针的问题

qq_40036736 2018-01-12 09:13:50
int * p1;
const int **pp2;
const int n = 13;

pp2 = &p1 // 把p1的指针地址赋给pp2
*pp2 = &n;// 把 n 的地址赋给包含2个int值的变量的指针
*p1 = 10;//这样的做法会改变n的值,n = 13;

我理解的对吗?
...全文
486 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
待续_1006 2018-01-23
  • 打赏
  • 举报
回复
多看书,对于知识点理解不透彻的话可以一边思考,一边编写程序验证,动手才是提升自己的唯一途径
HomerRo 2018-01-18
  • 打赏
  • 举报
回复
引用 楼主 qq_40036736 的回复:
int * p1; const int **pp2; const int n = 13; pp2 = &p1 // 把p1的指针地址赋给pp2 *pp2 = &n;// 把 n 的地址赋给包含2个int值的变量的指针 *p1 = 10;//这样的做法会改变n的值,n = 13; 我理解的对吗?
理解有误! 第一、int * p1=NULL;//最好赋予初值,如果是随机数的话,有可能去读取系统核心数据,要引起系统报警,同时会踢出本程序 第二、*p1 = 10;//这样的做法会改变n的值,n = 13;//这句赋值语句错了,常量是不允许再赋值的,编译程序会报错 第三、const int **pp2=NULL;//这是一个常量指针,最好也赋初值 这里还有一个指针常量和常量指针的概念,要搞清楚,具体,阅读C\C++相关教程。我就不啰嗦了
faihung 2018-01-17
  • 打赏
  • 举报
回复
引用 7楼faihung 的回复:
pp2 = &p1,等价于*pp2 = *p1 按照你的理解是对的。但是还有一个const,这里面c语言和c++是有区别的,c++的限制更多一些。
上面理解错了是**p1
faihung 2018-01-17
  • 打赏
  • 举报
回复
pp2 = &p1,等价于*pp2 = *p1 按照你的理解是对的。但是还有一个const,这里面c语言和c++是有区别的,c++的限制更多一些。
择yi 2018-01-17
  • 打赏
  • 举报
回复
把 const 数据或非const数据的地址初始化为指向const的指针是正确的,而非const 数据地址只能赋给普通的指针
择yi 2018-01-17
  • 打赏
  • 举报
回复
#include <stdio.h>


int main (void)
{
    int  * p1;
    int **pp2;
    int n = 13;

    pp2  =  & p1  ; //    把p1的指针地址赋给pp2
    * pp2  =  &n;//   把 n 的地址赋给包含2个int值的变量的指针
    *p1 = 10 ;//这样的做法会改变n的值,n = 13;

printf ("%d",n);
    return 0;
}
择yi 2018-01-17
  • 打赏
  • 举报
回复
理解上来是没错的,可是程序中const 已经 使得n 变成 "只读" 的模式,你再用指针去改变它的值会出现不匹配的错误,有的编译器可以运行。
赵4老师 2018-01-17
  • 打赏
  • 举报
回复
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
自信男孩 2018-01-12
  • 打赏
  • 举报
回复
理解是没问题的。建议自己将自己的伪代码写成程序然后测试一下,看一下结果。先有预想,然后编写程序运行一下结果,看是否和自己的想法一样,最后总结一下这类程序的原理。
paschen 2018-01-12
  • 打赏
  • 举报
回复
修改常量的值是未定义的,可能可以修改,也可能修改不了(编译器直接把常量编译成指令了)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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