大家都知道在C语言中是没有字符串这个数据类型的,那我们如何来处理字符串呢?事实上我们是把字符串当成字符数组来处理。
**字符串的实质是:字符数组+’\0’**,用反斜杠0来表示字符串的结尾。
那当字符串作为数组的元素,我们如何操作呢?
1 | char[5]="hello"; //字符数组 |
那么如果我们要表示:{“aaa”,”aaa”,”aaa”,”aaa”,”aaa”},该用什么数据类型呢?
【指针数组】
指针数组是指数组元素为指针的数组;
指针数组是由二维数组演化而来
1 | int a[2][3]={1,2,3,4,5,6}; |
我们都知道二维数组可以看成是元素是数组的一维数组,也就是可以把上面改为:int a[2][3]={{1,2,3},{4,5,6}}
,每一行用括号括起来。换句话说,可以表示为int a[2]={a1[3],a2[3]};
元素是数组的数组
这里的a1[3]={1,2,3}
,a2[3]={4,5,6}
,既然如此,我们便可以声明两个指针p1,p2,由于数组名是首地址,即int *p1=a1
,int *p2=a2
,所以我们可以得到int *a[2]={p1,p2};
元素是指针的数组
【字符串是一种特殊的数组】
1 | char str[]="hello"; |
字符串=字符串+‘\0’
字符串的名称就是字符串的首地址
我们声明三个字符串:
1 | char str1[10]="hello"; |
我们再声明三个指针,分别指向三个字符串
1 | char *p1= str1; |
我们把三个指针放到字符数组里面
1 | char *string[3]={p1,p2,p3};//因为存放的是指针,所以数组名前要加星号 |
将p1,p2,p3用字符串首地址代替
1 | char *string[3]={str1,str2,str3} |
再将字符串的值代入数组
1 | char *string[3]={"hello","welcome","string"} |
字符串做元素的数组,这个数组的类型是字符串指针类型,也就是char *类型。
我们来看个例子:
1 |
|
字符串指针的性质
1.字符串可以当作数组来处理;
2.可以声明一个指针p,利用指针偏移量来访问数组;
1 |
|
字符串与字符数组的联系
1.字符串被当做字符数组来处理;
2.字符串的首地址是字符串名,字符数组的首地址是数组名,其性质相同;
字符串与字符数组的区别
1.字符串有终止符‘\0’,而字符数组没有;
2.可以通过指针类型来修改字符数组的元素,但是不能修改字符串中的字符;