C语言之指针与字符串

大家都知道在C语言中是没有字符串这个数据类型的,那我们如何来处理字符串呢?事实上我们是把字符串当成字符数组来处理。

字符串的实质是:字符数组+‘\0’,用反斜杠0来表示字符串的结尾。
那当字符串作为数组的元素,我们如何操作呢?

char[5]="hello"; //字符数组

那么如果我们要表示:{“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.可以通过指针类型来修改字符数组的元素,但是不能修改字符串中的字符;

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淮南大甜橘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值