首页 > 编程知识 正文

指针地址赋值,值传递和指针传递

时间:2023-05-04 14:20:35 阅读:58071 作者:3710

本文分为三大部分

大标题1提出权限“概念”,大标题2验证赋值规则

大标题3、4、5是我个人的理解。

标题6是最直接的结论。

提醒

要读这篇文章,你可能需要知道和理解四种指针的定义。 这是基础。 当然如果真的不知道的话,可以直接去文尾记结论。

4种指针详细求解该https://Chou Xianyu.github.io/2018/08/26 /常数指针和指针常数/#more

指针对内容的访问权限普通指针=指针常量常量指针=四号指针

此权限是指是否可以用指针更改内存,只有“是”和“否”两种。 是的话我有权限。 不的话,我没有权限。 这个大小是0和1。 false和true取决于是否存在,而不是12345678的大小。

普通的指针很容易说,4号指针也是常数指针。 当然,不能更改内存

这个权限的大小关系是简单易懂的,前提是理解常指和常指这两个名词吧。

前面的手指和手指可以修改内存的内容,但不能用手指和四号。

指针赋值规则指针间的赋值:权限大的可以分配给权限小的。 (权限是指操作内存,即修改内存中内容的权限) ) ) ) ) ) ) )。

权限大的可以赋值给权限小的,同级权限也可以,小赋值给大不行

常数int n=0; //常数nint m=0; //变量mint* p1; //常规指针const int* p2; //常数指针与int const* p2相同//int* const p3=nullptr; //指针常数//int const * const p4; //第四个指针既是常指也是常指。 即,不能修改自己,也不能修改通过它指定的存储器p1=p2。 //error普指=经常指p1=p3; //correctpu=常规p1=p4; //error指=四号p1=n; //error普指p1=m多指//correct (普指=普指p2=p1; //correct经常指=一般为p2=p3; //correct常指=常指p2=p4; //correct经常是指=四号p2=n; //correct常指=常指p2=m; //correct常指=普指//p3常指。 常数赋值当然不行。 因为不能说是权限,所以在上边不定义p3。 //讨论的是权限。 这里作为例子进行定义和初始化,但是只有一个定义呢。 在这里注意了呢。 int* const p3=p1; //correct指常=一般指int* const p3=p2; //error常规=经常int* const p3=p4; //error常规=四号int* const p3=n; //error常规int* const p3=m; //correct指常=普指//p4为4号为常数,同p3,int const * const p4=p1省略//correct 4号=一般为int const * const p4=p2; //correct第四int const * const p4=p3; //correct号=常int const * const p4=n; //correct第四int const * const p4=m; //correct四号=普指这个规则是我自己想的,书里云的背后可能有这样的规律。 你好像说了存在是合理的,但实际表现不太正确。存在就有原因上的代码应该涵盖了所有“品种”指针的相互赋值,验证也符合预期。 如果有错误的话,请指出来。

赋值规则的过程赋值得要满足被赋值方的要求,就像你想和我结婚(遮住脸)一样,我需要你一米八。 请疼我。 我不需要其他东西。 有的话我也一点也不碰。 但是,只要你这两点少一点,我就不要,你就是axdbg也不行!

赋值是这个意思。 我指的是常指或普指。 我要求我有修改内存的权限。 所以,只有常指和普指可以和我结婚,可以代入我。 因为常指和四号没有那个权限啊。 反过来说,我是常指和四号。 我什么都不要,谁赋值都行。 上面也可以看到,给常指和四号赋值的时候都是correct。

赋值规则的必要性赋值规则以权限因指针而异为前提。 我想有多个指针更是为了程序吧,否则,只需要一个指针就能实现所有功能,不是很可怕吗? 给程序员太大的权利,如果程序员向上帝犯错,程序很可能崩溃。 给出指针权限差异的就像c的override一样吧。 也是对程序员的亲切吗? 这一方面,应该可以说明赋予指针不同权限的必要性。

然后赋值规则就形成了

个例子,如果没有这个规则,不同类型指针自由互相赋值:你定义一个常量n,然后再定义一个int* p,就是普指,普指按说是有修改内存的权利的,然后p=&n,拿到n的地址,是不是就可以通过p改变n了?(在存在不同权限指针的前提下)。如果没有这个规则,我们可以很随意地改变常量了。干嘛自己造了一座木屋,然后又给它浇上油?

斗胆扯内存

不管是指针常量还是常量指针还有普通指针,它们本身和那块内存都是没有本质关系的

它们(也包括普通类型的指针)只是一个带着镣铐或者没有镣铐的工具,我们可以通过const控制指针的权限以及它本身,同时我们在使用它们时也不能超出它们的权限范围和它们的个人承受力。

结论 int* p1; //普通指针const int* p2; //常量指针 与int const* p2相同int* const p3=nullptr; //指针常量int const * const p4; //四号指针 既是常指又是指常

p1和p3可以互相赋值;

p2和p4可以互相赋值;

p1和p3可以给p2和p4赋值,反之不行;

p3和p4在程序中只能在定义时被赋值一次,因为它们是const类型的量。

作者:@臭咸鱼

本文为作者原创,转载请注明出处:https://chouxianyu.github.io/2018/09/01/指针间的互相赋值/#more

欢迎转发和评论

转载于:https://www.cnblogs.com/chouxianyu/p/11270025.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。