千家信息网

C语言中 const int* 和 int* const 的区别是什么

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,本篇文章给大家分享的是有关C语言中 const int* 和 int* const 的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看
千家信息网最后更新 2025年01月23日C语言中 const int* 和 int* const 的区别是什么

本篇文章给大家分享的是有关C语言中 const int* 和 int* const 的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

#include using namespace std;/*              学习const 修饰的空间.        const int a;        int const a;        const int*  a;  // 修饰的 a 指向的内存空间 ,        int* const  a;  // 修饰的是a 变量.        const int*  const a; // 指针变量和指针指向的内存空间都不可以修改..        怎么理解这个呢,修饰的是指针, 那么指针和变量的区别是啥呢,         说白了都是地址,  保护一个指针是一个什么概念呢,        如果是保护的值指针变量本身, 那么和int* const 就没有区别了,         所以, 再向远处想一点,会不会是保护的是指针指向的变量的值不可以修改呢,         回头会发现,  const做了一个 堵路的操作,         int* const : 不可以直接操作变量,如修改变量的内容,说白了就是内存中的值.        const* int : 不可以通过指针间接的操作内存中的内容,        反推 :  在整个C 语言的系统中,还有那个操作可以直接修改内存中的值.        const int*                  总结 :        决定了一什么样的方式去限制修改内存,  const 靠谁近, 就决定了限制方式,         const  离 int* 近, 说明这是一个拒绝间接修改内存空间的.        const  离 变量名近, 说明这是一个拒绝直接修改内存空间的.*/void test1(){        int a = 10;        int c = 100;        const int* b; //  修饰的是未来的空间, 完全可以再起一行进行赋值.        // 这样的操作修改的是b变量, 并不是 const int* 想要的效果,        b = &c;        //*b = 100;  // 这个才是正确的验证方法,         int* const d = &a;  // 如果修饰的是变量, 那么在初始化的时候, 就必须给值, 不可以再起一行进行赋值.        //d = &c;  //  这样的是修饰的是d变量, 如果修改了d变量的值, 程序会提示错误.        /*                小结:                说白了就是保护变量本身的值, 还是保护变量所指空间的值,                 保护数据的范围不一样,   一个保护当下资源的值, 另外一个更像是保护更远一点资源的值                怎么用呢,                 变量的使用位置:                变量的定义和变量的赋值操作,                按照上述的描述, 会遇到上述的2种情况.                 变量在函数实参上的表现                1 如果函数的参数是 const int* 这样的, 意为这什么呢,                   在函数内部是可以修改指针对应变量所在内存空间中的值.                2 如果函数的参数是 int*  const a,这样的,                  在函数内部是, 不可以在给a变量进行赋值的,                 变量在函数返回值上的表象,                1 如果函数的返回值是  const int*  这样的,可以么,                 2 如果函数的返回值是  int* const  这样的,可以么.                做返回值的这个,完全依赖于接受者是一个什么状态, 接受后要咋个处理, 直接修改内存还是间接修改内存.            */}/*        这样修饰的是变量对应指针的空间不可以修改.*/void  test1(const int* a){        //*a = 100;  // 表现和正常的赋值没有区别, 是不允许修改的.        a = (int*)0x01;        return;}void test2(int* const a){        int c = 100;        //a = &c;   // a变量是不可以修改的,        return;}/*        const int*  这样的做返回值是没有意义, 接受者必须是一个const int* 类型的         函数返回后,如果对的接受者做 *var= ** 的操作, 如同普通的变量赋值的操作, 还是看        const int* 的约束能力, */const int* test3(){        static int b = 5;        static int* a =&b;        return a;}/*        同 test3是一样的,  函数返回后, 接受者的状态表明了一且,*/int* const test4(){        static int c = 3;        static int* a =&c;        return a;}int main(){        int a = 10;        test1(&a);        const int* p = test3();        //*p = 100;  // 这样是不可以的, 修饰的是未来的空间,         cout << *p << endl;        int* const q = test4();        //q = &a;         cout << *q << endl;        return 0;}

以上就是C语言中 const int* 和 int* const 的区别是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

0