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"字符串结束符啊,能相同么!!!