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,明天见!