初学constint*和constchar*-创新互联

初学const int* 和 const char*

创新互联建站是一家集网站建设,武邑企业网站建设,武邑品牌网站建设,网站定制,武邑网站建设报价,网络营销,网络优化,武邑网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

const int* 和 const char* 看起来虽然只有int 和 char 的差异,但实际上差别还有些大。

1,先从const int * 说起,const int* 和int const *是一样的,这个const 修饰词修饰的是变量,也就是这个指针对应的内存的值不可修改,指针的指向可以修改。

int a = 10;

int b = 100;

const int *p_int = &a;

p_int = &b;

//*p = 5;// 提示 *p不是可修改的左值

2,按照这个思路看一下 const char*

char chr[] = "hello";

const char *p_chr = chr;// chr 不需要用&取地址,因为chr本身就是chr[]的首地址

//*p_chr = 'a'; // 同const int* 一样,提升*p_chr 不是可修改的左值

p_chr = "world";//!

虽然*p_chr = 'a'; 这个表达式时错误的,但是p_chr = "world";时可执行的,看起来p_chr 指向的字符串被修改了!

为什么会出现上面这个现象?我理解有两个差异。

1,编译器对于指向 int 类型的指针和指向 char 类型的指针处理不同。如果在代码中使用p_int , 它是一个地址;但如果在代码中使用p_chr, 它时一个字符串(虽然本质上它也是一个地址,但是编译器对于指向char的指针,会自动调出字符串。而*p_chr 仅代表字符串的首字母)

2,字符串(“world”)和整数(10)的不同。字符串world是左值,而常数10是右值。“world”本身会在内存中分配一块地址存放这个字符串,并返回的的首地址。

综合上面两点,p_chr = "world";这个表达式就可以理解了。相当于重新开辟了一个内存位置存放了world,然后把这个内存地址返回给p_chr,  这样和const char* p_chr 并不矛盾,因为没有取试图修改p_chr 指向的内存位置,而是修改了指针的指向。类似于上面的 p_int = &b; 重新定向了指针指向。

初次看到这个还是有些混乱的,现在清楚多了。

关于左值和右值,(72条消息) 初识 C++ 函数参数引用和指针及左值和右值_weixin_52352638的博客-博客

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧

网站栏目:初学constint*和constchar*-创新互联
网站URL:https://www.cdcxhl.com/article8/cepgip.html

成都网站建设公司_创新互联,为您提供搜索引擎优化品牌网站制作云服务器网站制作响应式网站网站内链

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都app开发公司