在C和C++的世界里,我们允许字面量直接出现在表达式中,常用的字面量分为两种:字符字面量和数字字面量,比如:
1 | const char* sl = "hello world"; |
在上面的例子中,hello world
和42
都是字面量,因为他们没有任何的变量和它对应,直接以值的形式出现在表达式中。
它们两者虽都是字面量,但是他们两者有一个非常本质的区别,那就是字符字面量有自己的地址而数字字面量没有。个人理解的原因是,C/C++语言中并没有内置字符串这种类型,字符字面量实际上是char
这种内置类型的一个序列,我们没有办法原子操作字符串,所有关于它的操作都需要借助指针来完成。在上面这个例子中:int a = 42
实际上把42
这个值给了a
这个变量,而const char* sl = "hello world"
则是把"hello world"
这个字面量在内存中的地址,给了sl
这个指针变量【1】。
那么,同一个字符字面量的值,地址会是一样的吗?也就是说下面这个例子的输出到底是s什么:
1 | const char* s1 = "Hello world"; |