指针可以指向一个字符串字面量,可以指向一个字符数组,可以指向一块动态分配的内存单元:
char *s1, *s2, *s3 = “abcde”;
char ch[] = “fff”;
s1 = ch;
s2 = new char[10];
strcpy(s2, “fgh”);
用指针表示的字符串可以直接作为字符串操作函数的参数。但必须注意,如果该指针指向的是一个字符串常量时,则使用是受限的。如不能作为strcpy的第一个参数,不能用下标的方法去修改其中的元素,所以一般都冠以const,如const char *s3 = “abcde”;
由于在C++中,数组名被解释成指向数组首地址的指针。因此,字符串是用一个指针变量表示,我们可以把此指针变量解释成数组的首地址,通过下标访问字符串中的字符。如string[3]的值是d同时,与上述直接指向一个常量不同,可以使用下标的形式来修改字符数组的元素。
字符串作为字符数组传递时不需要指定长度。因为字符串操作的结束是依据‘0,如一个记录串中单词的个数的函数:
#include Using namespace std;int word_cnt(const char *s){ int cnt = 0; while (*s != '0') { while (isspace(*s)) ++s; //跳过空白字符 if (*s != '0') { ++cnt; //找到一个单词 while (!isspace(*s) && *s != '0') ++s; //跳过单词 } } return cnt;}
一个二级指针可以指向一个字符指针数组,如main()函数的参数就可以包含一个字符指针数组:
int main(int argc, char *argv[])
如在命令行中执行包括有字符指针数组的程序,可以在其中跟随n个定义的字符串:
#include int main(int argc, char *argv[]){ int i; cout << "argc=“ << argc << endl; for(i=0; i
假设生成的执行文件myprogram.exe,
在命令行输入:myprogram
输出结果:
argc=1 argv[0]=myprogram
在命令行输入:myprogram try this
输出结果:
argc=3 argv[0]=myprogramargv[1]=try argv[2]=this
以下是一个二级指针,就是指针指向的指针才指向具体的非地址值:
#include using namespace std;int main(){ char *city[] = {"aaa