- 论坛徽章:
- 2
|
前两组和后两组是一个意思, 数组名是一个指针常量,不过数组必须要有确切的大小。在初始赋值的时候会进行内容拷贝。
后面两个都会产生常量指针,而这个指针不过是一个c里字符常量的一个别名,或引用吧。
所以
- char a[] = "abc";
- a += 1; //error
- char *c = "abc";
- c += 1; //ok
复制代码 如果把这些地址打印出来就可以看出
- int main(int argc, char* argv[])
- {
- char a[] = "abc";
- char b[] = "abc";
- const char c[] = "abc";
- const char d[] = "abc";
- char * e = "abc";
- char * f = "abc";
- const char *g = "abc";
- const char *h = "abc";
- printf("%d\t%ul\t%ul\n", (a == b), (unsigned long)a, (unsigned long)b);
- printf("%d\t%ul\t%ul\n", (c == d), (unsigned long)c, (unsigned long)d);
- printf("%d\t%ul\t%ul\n", (e == f), (unsigned long)e, (unsigned long)f);
- printf("%d\t%ul\t%ul\n", (g == h), (unsigned long)g, (unsigned long)h);
- return 0;
- }
复制代码 看出数组和字符串常量是放在不同的段上。 |
|