一,字符指针:
用字符指针指向一个字符串。可以不定义字符数组,而定义一个字符指针。用字符指针指向字符串中的字符。
void main()
{
char *string="I love China!";
printf("%s\n", string);
}
在这里,我们没有定义字符数组,而是在程序中定义了一个字符指针变量
string
,用字符串常量
"I love China!"
,对它进行初始化。
C++对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来才存放该字符串常量。对字符指针变量初始化,实际上是把字符串第1个元素的地址(即存放字符串的字符数组的首元素地址)赋给string。有人认为string是一个字符串变量,以为在定义时把"I love China!"这几个字符赋给该字符串变量,这是不对的!!
实际上,char *string="I love China!"; 等价于:
char *string;
string= “I love China!”;
可以看到,string被定义为一个指针变量,指向字符型数据,请注意它只是指向了一个字符变量或其他字符类型数据,不能同时指向多个字符数据,更不是把“I love China!”这些字符存放到string中(指针变量只能存放地址),也不是把字符串赋给*string。只是把“I love China!”的第一个字符的地址赋给指针变量string。
对于字符型指针char*值的输出实际上是输出从该字符指针所指位置开始直到串尾结束符\0字符为止的那一个字符串,并且直接用cout<<p;就可以输出整个字符串,例如:
char s[21];
char *ps=s;
for (int i=0; i<20; i++)
s[i]='A'+i;
s[20]='\0';
ps++;
cout<<"ps="<<ps<<endl;
输出即为整个从A到T的字符串。
二,数组指针:
对于上列中,若为数组指针,例如:
int a[10]={0,1,2,3,4};
int *p=a;
cout<<p<<endl;
则输出的p为数组的首地址。