重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

初学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*-创新互联
文章位置:http://cqcxhl.cn/article/cepgip.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP