1、介绍
概念:
字符指针,就是字符类型的指针,同整型指针,指针指向的元素表示整型一样,字符指针指向的元素表示的是字符。
假设:
char ch = 'a';
char * pc = &ch;
pc 就是字符指针变量,字符指针变量是用来存放字符的地址。
但是,字符指针除去单一的字符,还可以寄存字符串。
char * p = "abcdefghi";
而对于字符串而言,我们首先要知道,上述表达式中的字符串是一个常量字符串,无法被修改,且并不是将整个字符串的地址寄存在了字符指针变量p中。
而是将字符串的首个字符的地址寄存在了字符指针变量p当中。
就如同数组一样,数组名代表的仅仅是数组的首元素地址一样。
char * p = {'a','b','c','d','e','f','g','h','i','\0'}
而且在进行打印 * p 之后,打印出的结果也仅仅是字符串的首个字符 a
2、对比
如上所示,str1和str2都为数组,是数组之间的比较。
而str3和str4都为指针,是指针之间的比较。
在str1和str2的比较过程中,许多人会产生一个误区,为什么str1和str2的数组内容一致,但为什么不相等呢?
答案是,str1和str2虽然说数组的内容一致,但二者都身为数组,对于数组中寄存元素,首先要进行的是在内存中申请一个空间,而后,二者的数组名不同,自然申请的空间就并不相同。
其次,在申请空间后,空间中所代表的地址也并不相同,所以str1和str2的数组内容虽是相同,但二者在内存中申请的空间并不相同。
就像酒店的宾馆,虽然房间的配置一样,但你能说101牌号的房间等于102牌号的房间吗。
二者所处的空间根本不一致!
而str3和str4,二者均为字符指针变量,且二者存储的内容都是同一个字符串中的首个字符,且寄存在字符指针变量中的字符串是常量字符串,无法进行修改。
所以二者指向的是同一个字符串,也寄存的是同一个地址,所以本质上,str3和str4是相同的。