C语言知识回顾——指针与字符串

闲言少叙~开始了

大家都知道在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=a1int *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.可以通过指针类型来修改字符数组的元素,但是不能修改字符串中的字符;

发布了21 篇原创文章 · 获赞 44 · 访问量 1578

猜你喜欢

转载自blog.csdn.net/weixin_43964458/article/details/104525513