文章目录
在进入正题之前,先上一波 思维导图,帮助你了解下面的知识体系。
字符串表示
概念
字符串:字符串是以空字符(’\0’)结尾的char数组。
创建
- 数组:
char name[] = "Elizabeth";
- 指针:
char *str = "Hello!";
看到这里,聪明的你也许会发现,既然有两种创建方式,那么它们之间有什么不同之处呢?
数组和指针创建的区别
-
相同点
-
使用数组符号
for (int i = 0; i < 10; i++) printf("%c", name[i]); printf(""); for (int i = 0; i < 6; i++) printf("%c", str[i]);
-
使用指针加法
for (int i = 0; i < 10; i++) printf("%c", *(name+i)); printf(""); for (int i = 0; i < 6; i++) printf("%c", *(str+i));
-
-
不同点
只有指针可以使用自增运算符,WTF?难道数组名不是一个指针吗?
不急,先耐心的看一下,指针的自增运算符的使用:
while (*(str))
putchar(*str++);// 编译,运行正常
再来看一下,数组名能不能使用自增运算符?
while (*name)
putchar(*name++);// 编译报错,
结果:
从错误结果来看,难道说,数组名是一个常量?
在《C和指针》这本书中“第八章 数组”中,作者从底层论述了:数组名是一个指针常量。
存储方式
字符串常量属于静态存