闲言少叙~开始了
大家都知道在C语言中是没有字符串这个数据类型的,那我们如何来处理字符串呢?事实上我们是把字符串当成字符数组来处理。
字符串的实质是:字符数组+’\0’,用反斜杠0来表示字符串的结尾。
那当字符串作为数组的元素,我们如何操作呢?
char[5]="hello";//字符数组
那么如果我们要表示:
?[5]={“aaa”,“aaa”,“aaa”,“aaa”,“aaa”}
该用什么数据类型呢?——即将揭幕!
【指针数组】
指针数组是指数组元素为指针的数组;
指针数组是由二维数组演化而来
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}
;
元素是指针的数组
【字符串是一种特殊的数组】
char str[]=“hello”
字符串==字符串+‘\0’
字符串的名称就是字符串的首地址
我们声明三个字符串:
char str1[10]="hello";
char str2[10]="welcome";
char str3[10]="string";
我们再声明三个指针,分别指向三个字符串
char *p1= str1;
char *p2= str2;
char *p3= str3;
我们把三个指针放到字符数组里面
char *string[3]={p1,p2,p3};//因为存放的是指针,所以数组名前要加星号
将p1,p2,p3用字符串首地址代替
char *string[3]={str1,str2,str3}
再将字符串的值代入数组
char *string[3]={"hello","welcome","string"}
字符串做元素的数组,这个数组的类型是字符串指针类型,也就是char *类型。
我们来看个例子:
#include <stdio.h>
int main(void)
{
char *week[7]={"Monday","Tuesday","Wednesday","Thursday","Friday","Satuaday","Sunday"};
int day=0;
printf("input day(1...7):")
scanf("%d",&day);
if(day==7&&day==0)
{
printf("%d\n equ:%s\n",day,week[day-1]);//下标是0-6,所以要减一
}
else
{
printf("错误")
}
}
字符串指针的性质
1.字符串可以当作数组来处理;
2.可以声明一个指针p,利用指针偏移量来访问数组;
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[]="hello world";
char *p=str;
for(i=0;i<strlen(str);i++)
{
printf("%c",str[i]);
printf("%c",*(p+i));//指针偏移量
}
return 0;
}
字符串与字符数组的联系
1.字符串被当做字符数组来处理;
2.字符串的首地址是字符串名,字符数组的首地址是数组名,其性质相同;
字符串与字符数组的区别
1.字符串有终止符‘\0’,而字符数组没有;
2.可以通过指针类型来修改字符数组的元素,但是不能修改字符串中的字符;