c语言常量区的地址赋值

Python013

c语言常量区的地址赋值,第1张

这个情况比较多,不过一般说以下两种情况下的常量是有地址的:

1、如果是以const关键字修饰变量而产生的“不可变变量”的话,是有地址的,如const int a = 0。

但是严格来说const修饰只是产生了不可变变量,并不是严格意义上的常量。

2、字符串常量,例如 char *a = "abc"那么字符串“abc”就是一个字面值字符串,这是一个常量,其地址就是这个字符串第一个字符所在的地址。

再有像是字面值数字 "int a = 5"里边的5,是没有地址的。

表达式本身作为代码,并不拥有地址。但是用来组成表达式的变量或常量是可以拥有地址的。

获取一个常量或变量的地址可以用“&”取址符,例如:

const int b = 0

const int * pb = &b

那么pb里边就是b的地址了。

这种说法是有问题的

第一例

char* s1 = "hello, world"

char* s2 = "hello, world"

if(s1 == s2)

printf("s1和s2指向同一个在文字常量区的字符串")

这个地方要是得出“s1和s2指向同一个在文字常量区的字符串”,显然是编译器做了优化后的结果,但是标准中没有强制要求,所以实际上这个例子的结果是未定义的,或者说,要是完全按照标准来的话,两者的地址应该是不同的

参见下链

http://topic.csdn.net/t/20031229/11/2613101.html

第二点

"hello, world"和 "hello,"显然是完全不同的

一个是"hello, world\0“,另一个是 "hello,\0"字符串结束符啊,能相同么!!!