字符串与指针
Posted geziyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串与指针相关的知识,希望对你有一定的参考价值。
1、字符串的表示形式
在C程序中,可以用两种方法访问一个字符串:(1)用字符数组存放一个字符串,然后输出该字符串;(2)用字符指针指向一个字符串。
//定义一个字符数组,对它初始化,然后输出该字符串 #include<stdio.h> int main(){ char string[]="I love China!"; printf("%s ",string); return 0; }
和前面介绍的数组属性一样,string 是数组名,它代表字符数组的首元素的地址。string[4]代表数组中序号为4的元素(它的值是字母v),实际上string[4]就是善(string+4),string+4是一个地址,它指向字符“v”。
//可以不定义字符数组,而定义一个字符指针。用字符指针指向字符串中的字符。 #include<stdio.h> int main(){ char *string="I love China!"; printf("%s ",string); return 0; }
在这里没有定义字符数组,在程序中定义了一个字符指针变量string,用字符串常量“I love China!"对它初始化。C语言对字符串常量是按字符数组处理string的,在内存中开辟了一个字符数组用来存故该字符串常量。对字符指针C变量string初始化,实际上是把字符串第1个元素的地址(即存放字符串的字符数组的首元素地址)赋string。有人误认为皮,string是一个字符串变量,以为在定义时把“I love China!"这几个字符赋给该字符串变量,这是不对的。定义string的部分:
char *string="I love China!"
等价于:
char *string; string="I love China!";
可以看到string被定义为一个指针变量,指向字符型数据,请注意它只能指向一个字符变量或其他字符类型数据,不能同时指向多个字符数据,更不是把“I love China!"这些字符存放到string中(指针变量只能存放地址),也不是把字符串赋给* string。只是把“I love China!"的第1个字符的地址赋给指针变量string。
输出时用printf("%s ",string);,%s是输出字符串时所用的格式符,在输出项中给出字符指针变量名string,则系统先输出它所指向的一个字符数据,然后自动使string加1,使之指向下一个字符,然后再输出一个字符.....如此直到遇到字符串结束标志‘ ‘为止。注意,在内存中,字符串的最后被自动加了一个‘ ‘,因此在输出时能确定字符串的终止位置。说明:通过字符数组名或字符指针变量可以输出一个字符串。而对一个数值型数组,是不能企图用数组名输出它的全部元素的。
//将字符串a复制为字符串b #include<stdio.h> int main(){ int i; char a[]="I am a boy!",b[20]; for(i=0;*(a+i)!=‘