20180129. 11 字符串字面量 中的数组与指针

易错点:

1. 递增运算符只能用于变量名前(只能个用于可修改的左值)  

 对于数组:

 进行操作时要避免此错误  如: char  word[10];       操作  ++word  是错误的  因为他并不是变量,word 是代表数组的首地址是一个常量。


对于指针:

 指针形式是把数据(字符串,数字....)的地址储存在指针变量中。   该变量最初指向该字符串的首字符,  但由于它是变量可以使用递增运算符,如++pt 将其指向第二个字符。


2.指针与数组在字符串字面量:


2.1 字符串字面量:

 在程序中用双引号“ ” 括起来的内容被称为  字符串字面量“i can do it”  属于静态储存类别:


扫描二维码关注公众号,回复: 931134 查看本文章

  静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束 。   


所以“i can do it ”在在内存中占据一定的空间,并有自己的地址,并且 字符串字面量被视为是   const  数据   所以无法改变它的值,在用指针指向这个数据时候   要将指针声明为指向const数据的指针:


const char * p = " i can do it ";

2.2 对字符串初始化时候的不同(两种方法):

①初始化数组:

char ar[20] = "i can do it";

是把 静态存储区的字符串 “ i can do it ”拷贝到数组中,


②初始化指针:

const char * pt = "i can do it ";

而初始化指针只把字符串的地址&拷贝给指针。 所以不能用指针改变它指向的数据。但可以将字符串字面量拷贝给数组来改变这个数组里面的值。

 更为通俗的理解是 字符串字面量A 是一张名画放在一个,博物馆里面,而为了知道这张画的信息 我们可以利用两种方式:


①数组形式 ——买一张仿的, ②指针形式——去博物馆看原画


首先: 因为是放在博物馆里面的名画我们自然不能在它上面乱画标注去改变它(字符串字面量被视为const数据),


而根据①②形式我们都可以知道画上的具体信息,画了什么,等等(两种形式),


而①形式因为是我们自己买的所以可以在上面乱画修改,但仅仅改变是拷贝过来的信息,原画并未收到影响。


而②形式我们知道了这幅画地址,我们可以去这个地址上的博物馆看这幅画,但我们肯定不能改变这幅画。


自然的我们可以知道:数组形式①的地址 和 指针形式②地址肯定是不同的 这就是初始化时候利用数组 与 指针的区别



猜你喜欢

转载自blog.csdn.net/qq_36324796/article/details/79192739