谈谈C语言里的字符串常量赋值

C语言的字符串,使用""括起来,在程序中被视作char类型的数组,只是这个数组被保存在了内存中的常量区。

在C语言里,字符串常量赋值可以分为两种

字符串常量赋值给指针

举个书中的例子

1
char *cards = "JQK"

此时,cards指针变量虽然在栈上,但是它指向字符串常量”JQK”在内存常量区的地址。而常量是只读类型的,所以任何对常量的修改都会报错。言下之意,如果想修改cards指针变量所指针内存常量区的值,程序会报错。

我们一般习惯在这种写法前加上const关键字,指明cards变量是只读类型。这样一旦我们尝试修改cards指针变量的内容时,在编译时就会得到报错。

字符串常量赋值给数组

还是上面的例子,只是把指针变成了数组

1
char cards[] = "JQK";

此时,cards数组变量所指向的并不是字符串常量”JQK”的内存常量区地址,而是字符串常量”JQK”在栈上的内容的拷贝的地址。此地址非常量区地址,所以,此时的cards数组变量可以修改其内容。

这就是字符串常量在赋值的时候容易遇到的错误。

avatar

chilihotpot

You Are The JavaScript In My HTML