字符串和字符串函数之学习笔记(一)

1.字符串

1.指针和字符串
没错,指针又出现了。。。。。
首先区分下:字符和字符串
字符串是以空字符(\0)结尾的char类型数组
至于该怎么表示字符串呢,请您接着看:

#include <stdio.h>
#define MSG"I am Wang Gaoshi."
#define MAX 100
int main ()
{
 char words[MAX]="I am Gaoshi Wang.";
 const char * pt1="I am missing WY";
 puts("Here are some strings:");
 puts(MSG);
 puts(words);
 puts(pt1);
 words[8]='z';
 puts(words);
 return 0;
}

在这里插入图片描述

用双括号括起来的内容称为字符串字面量或字符串常量,编译器会在末尾自动加\0
如果要在字符串内部用双引号,要加====
字符串常量属于静态存储类别即在整个程序的生命期存在
和数组类似的是:双括号括起来的内容被视为(指向该字符串储存位置的)指针

#include <stdio.h>
int main()
{
 printf("%s %p %c","we","are",*"family");
 return 0;
}

在这里插入图片描述
在定义字符串数组时,如果人工指定大小,则一定要在数完数之后+1,当然啦,这个工作交给计算机也木有毛线问题,变长数组的声明方式也可以用
哎,这真的和数组太像了,什么字符数组名就是指向首元素的地址之类的blablabla…就不赘述了
所以嘞,重点出来了有木有
我们得关注以下,哪些地方不一样~~
ほら:
字符串有两个副本,一个是静态内存中的字符串字面量,另一个在程序开始运行的时候才被储存在数组中
在数组中或者用数组形式定义的字符串“++数组名”是不被允许的,因为数组的元素是变量,但是数组名不是变量
但是在用指针形式定义的字符串中,"++指针"木有问题
代码如下:

#include <stdio.h>
int main ()
{
 char heart[]="how are you";
 const char * pt="I am fine,thank you";
 //两个都可以使用数组表示法
 for(int i=0;i<6;i++)
  putchar(heart[i]);
 putchar('\n');
 for(int i=0;i<6;i++)
  putchar(pt[i]);
 putchar('\n');
 
 //两个都能进行指针加法操作
 for(int i=0;i<6;i++)
  putchar(*(heart+i));
 putchar('\n');
 for(int i=0;i<6;i++)
  putchar(*(pt+i));
 putchar('\n');
 
 //但是只有指针表示法可以进行递增操作
 while(*(pt)!='\0')
  putchar(*(pt++));
  
 return 0; 
}

最后一行pt++的括号写不写都行,反正都是先解引再+1

如果想让heart和pt统一:pt=heart;但是不能反过来啦,因为赋值运算符的左侧必须是变量
如果想改变数组元素的信息,用前面写的数组的方法还是下面的指针的方法,都是可以的

*(heart+6)='w';

但如果使用指针的话。。。。让我再钻研钻研。。emm,没看懂。。

那就先到这吧,我今天的活还没干完,emm,明天见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值