char[] 的真正意义

1.既有char* 何有 char[]?

一直以来我对此一无所知,我也一直在想这同一件事的两种写法有何意义,其中的奥妙容我慢慢道来。

2.char* 无法做到的事情

 char* p; // 这条语句声明了一个指向char类型的指针p,请注意,它没有为*p 开辟空间,甚至*p在哪儿都是个问题
 char p[100];  // 这条语句声明了一个指向char类型的指针p,同时,它为*p开辟了100个字符的空间

3.仅仅如此吗?

有意思的在后面

 // 这种写法是古老的,被淘汰的写法,现代编译器只是为了
 //兼容以前的错误代码才允许运行的一种写法,因为"abc" 是一个常量,储存在文字常量区
 //也就是 const char* ,而const char *是无法转变为 char* 的。这里强制转换的结果就是
 //*p指向的量是无法修改的。
 char* p = "abc";  
   
 // 上面那句的正确写法应该是这样
 const char*p = "abc";  

 // 那么这种写法也不对吗?,非也,这时的"abc"不是常量,这里编译器把该语句解析为
 // char p[4] = {'a','b','c','\0'};所以这里的"abc"是储存在栈区的。
 char p[] = "abc";  		

 //那么以此推理,这种写法中 p 也是储存在栈区的。其本质是和字符数组char[] 一样。
 string p = "abc";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值