本篇文章给大家分享的是有关C语言中 const int* 和 int* const 的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
#include <iostream> 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 的区别是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。