1. 字符串的定义
-
使用指针和数组两种方式定义字符串
#include<stdio.h> void main() { char string[] = "i love china!"; char* string_ = "i love china!"; printf("%s\n", string); printf("%s", string_); }
-
从汇编的角度来看这两种定义方式的区别
- 使用指针来定义字符串效率更高
- 指针定义的字符串在内存中开辟的空间位于 常量存储区,不能被改变和重写
- 数组定义的字符串在内存中开辟的空间位于自由存储区,可以被改变和重写
2. 两种定义方式的区别
-
我们都知道,多快好省的东西只是理想的,因此字符串的定义也是一样,指针的方式很简单,但是它存在一个问题,就是其空间直接被分配在内存的常量区,因此用指针定义的字符串是不可以被重写的。我们看下面的例子:
- 【用数组定义的字符串】
【用指针定义的字符串】
- 【用数组定义的字符串】
-
验证了结论即:数组定义的字符串,其中的内容都可以被修改,但是使用指针定义的字符串其整体被看做一个常量,其中的每一个字符不可以被单独修改。
-
更加简单的写法:
#include<stdio.h> void reWriteArray(char*raw_array,char*rewritted_array) { printf("未更改之前的字符串是:%s\n", rewritted_array); char* p=rewritted_array; while ((*rewritted_array++ = *raw_array++)!='\0') { ; } printf("更改过后的字符串是:%s", p); } void main() { char* string = "i am a teacher"; char* string1 = "she is a teacher"; char string2[] = "she is a teacher"; reWriteArray(string, string2); }
3. 题外话 – python 的字符串比较
- python 中的字符串中的内容也是不可修改的,大家有兴趣可以将 C 语言中的一些现象和 python 以及其他语言进行比较,很有趣