在C语言中,使用字符串有两种方式,使用char指针和使用char数组。它们之间有什么区别和联系?下面我们一起来说说:
C语言有两种方法来表示字符串,如下所示:
首先,任何常数都将被放在一个固定的内存区域,称为。rodata区域,也称为常数区域。所以上面代码中的“abcde”和“uvxyz”放在里面。
其次,s1和s2都是普通变量,都放在堆栈内存中。
然后,s1是指针,所以它的大小始终是四个字节(32位系统),而s2是数组,大小取决于具体内容。
它们在内存中的变量之间的关系如下:
对于s1,只保留了一个地址0x123,就是常量区的字符串“abcde”的地址。
对于s2,保留从常量区域复制的字符串本身的内容“uvxyz”。从上图可以看出,此时“uvxyz”实际上有两个副本。
那么如何在节目中使用这两种方法呢?答案很简单。如果只是用一个字符串,不需要修改,可以用指针,但是如果需要修改字符串的内容,就需要用数组。
在上面的代码中,第一行试图将“ABCDE”插入常量区域,这显然是不可行的。第二行尝试将“UVXYZ”填入堆栈中的数组,这是可行的。
Char数组和char指针本质上是不同的,不要混淆。