第10章 字符串 10.2 使指针指向一个字符串
讨论本章
- 知识点:
- 通过赋初值的方式使指针指向一个字符串
- 通过赋值运算使指针指向一个字符串
- 用字符数组作为字符串和用指针指向的字符串之间的区别
可以在定义字符指针变量的同时,将存放字符串的存储单元起始地址赋给指针变量。例如:char *psl=”form one”:
这里,将把存放字符串常量的无名存储区的首地址赋给指针变量psl,使psl指向字符串的第一个字符f。注意:不要误以为是将字符串赋给了psl。又如:
Char str[]=”form two”,* ps2=str;
在定义指针变量ps2的同时,把存放字符串的字符数组str的首地址作为初值赋给了它,使ps2指向了字符串的第一个字符f。
如果已经定义了一个字符型指针变量,可以通过赋值运算将某个字符串的起始地址赋给它,从而使其指向一个具体的字符串。
用字符数组作为字符串和用指针指向的字符串之间的区别
用字符数组作为字符串和用指针指向的字符串之间的区别若有以下定义:
char mark[]=”PROGRAM”;char * pmark=”PROGRAM”:虽然字符串的内容相同,但它们占有不同的存储空间,它们的存储结构如图10.2所示。
在这里,mark是一个字符数组,通过赋初值,系统为它开辟了刚好能存放以上8个字符的存储空间(字符序列再加′\0′),可以通过数组元素mark[0]、mark[1]等形式来引用字符串中的每个字符,在这个数组内,字符串的内容可以改变,但数组mark总是代表一个固定的存储空间,且最多只能存放含有7个字符的字符串。而pmark是一个指针变量,通过赋初值,使其指向一个字符串常量,即:指向一个含有8个字符存储空间的无名字符数组。注意,mark数组中的字符串内容虽然与pmark所指字符串内容相同,但这两个字符串分别占有不同的存储空间。虽然也可以通过pmark[0]等形式来引用字符串常量中的每个字符,但指针变量pmark中的地址可以改变而指向另外一个长度不同的字符串。一旦pmark指向新的字符串而没有另一个指针指向原来的字符串,则此字符串将“丢失”,其所占存储空间也将无法引用。