user-0 提问: char s[]与char *有区别吗

回复:
user: user-1
content: 引用 20 楼 hjgzj 的回复:[quote=引用 17 楼 zhao4zhong1 的回复:] #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！  举报你作弊[/quote] 程序员应当拥有对内存中每个字节读写的权利！

user: user-2
content: 引用 17 楼 zhao4zhong1 的回复:#pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！  举报你作弊

user: user-3
content: 引用 1 楼 Intel0011 的回复:char s[]与char *s作为函数形参时没什么区别 但 char s[] = "test"; char *s= "test"; 有区别，前者s所指的字符串可以修改（因为编译器将字符串放在栈区），后者不可以（因为编译器将字符串放在常量区） +1  楼上正解！

user: user-4
content: 引用 11 楼 mujiok2003 的回复: #include <iostream> int main() { 	char s1[] = "test"; 	char *s2= s1;  	*s1 = 'a'; 	*s2 = 'b';  	printf("%s %s\n",s1,s2);      return 0;   }   指向到哪一步都不会出错 char* 看来也可写吗?

user: user-1
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！

user: user-4
content: 引用 1 楼 Intel0011 的回复:char s[]与char *s作为函数形参时没什么区别 但 char s[] = "test"; char *s= "test"; 有区别，前者s所指的字符串可以修改（因为编译器将字符串放在栈区），后者不可以（因为编译器将字符串放在常量区）存放在所谓 常量区 的是 "test" 这个数组  而不是char* s 这个指针  什么后者不能修改 什么char* 不能修改 真是玩笑  说得好像 char str[10], *pstr = str; 没有人这样做似得  你所谓的区别是 字符串字面量的特殊条例  而且 这个条例不是 不可以修改 是修改了谁也不知道会发生什么[那是未定义行为 类似 i = i++]

user: user-5
content: 引用 13 楼 xhw88398569 的回复:[quote=引用 9 楼 mujiok2003 的回复:] [quote=引用 7 楼 henry3695 的回复:] 前者可读写，后者只读  后者怎么就只读了？ [/quote]第二个“test”放在常量区，所以就只读了[/quote]  oh, yeah. i see what u talking about

user: user-5
content: 引用 13 楼 xhw88398569 的回复:[quote=引用 9 楼 mujiok2003 的回复:] [quote=引用 7 楼 henry3695 的回复:] 前者可读写，后者只读  后者怎么就只读了？ [/quote]第二个“test”放在常量区，所以就只读了[/quote] 什么"test"

user: user-6
content: 引用 9 楼 mujiok2003 的回复:[quote=引用 7 楼 henry3695 的回复:] 前者可读写，后者只读  后者怎么就只读了？ [/quote]第二个“test”放在常量区，所以就只读了

user: user-7
content: 一个运行时赋值，一个编译时赋值

user: user-5
content: 引用 10 楼 henry3695 的回复:[quote=引用 9 楼 mujiok2003 的回复:] [quote=引用 7 楼 henry3695 的回复:] 前者可读写，后者只读  后者怎么就只读了？ [/quote]   #include <iostream> int main() { 	char s1[] = "test"; 	char *s2= "test";  	*s1 = 'a'; 	*s2 = 'b';  	printf("%s %s\n",s1,s2);      return 0;   }     vc6 执行到  *s2 = 'b'; 这句话就报错了，试图去修改常量区域的数据，系统不让改  --------------------------- Microsoft Visual C++ --------------------------- Unhandled exception in test.exe: 0xC0000005: Access Violation. --------------------------- 确定    --------------------------- [/quote]  汗， 那是char*指向的内容， 不是char*本身只读。   这种情况本来该用char const*

user: user-8
content: 引用 9 楼 mujiok2003 的回复:[quote=引用 7 楼 henry3695 的回复:] 前者可读写，后者只读  后者怎么就只读了？ [/quote]   #include <iostream> int main() { 	char s1[] = "test"; 	char *s2= "test";  	*s1 = 'a'; 	*s2 = 'b';  	printf("%s %s\n",s1,s2);      return 0;   }     vc6 执行到  *s2 = 'b'; 这句话就报错了，试图去修改常量区域的数据，系统不让改  --------------------------- Microsoft Visual C++ --------------------------- Unhandled exception in test.exe: 0xC0000005: Access Violation. --------------------------- 确定    ---------------------------

user: user-5
content: 引用 7 楼 henry3695 的回复:前者可读写，后者只读  后者怎么就只读了？

user: user-9
content: 一个是数组，一个是指针。 数组，在内存中所控制的范围不可变，即所指向的地址不可变。但地址中的内容，可变。除非程序中声明是const变量。 指针，在内存中所控制的范围可变，即所指向的地址可变。地址中的内容，根据程序启动时分配的范围来决定地址是否可变。

user: user-8
content: 前者可读写，后者只读

user: user-10
content: char* s是字符串指针，char sz[]是字符数组。你可以用sizeof(sz)/sizeof(char)看sz里面有多少个字符，但是char* s只能用strlen(s); sizeof(s)==指针大小，32位是4个BYTE.. 作为形参，char sz[]传的是数组首地址，也是指针。。。这就和s一样了。。

user: user-11
content: 有区别，其中前面都有提到过，还有一个就是char s[]中的s是作为常量，是不能做指针自加(++)的操作，但是char * 可以，这也是区别之一

user: user-12
content: 本质上都是指针，只是一个看做数组而已。

user: user-13
content: 看大牛们回答，是一种享受

user: user-1
content: 引用 22 楼 henry3695 的回复:[quote=引用 21 楼 zhao4zhong1 的回复:] [quote=引用 20 楼 hjgzj 的回复:] [quote=引用 17 楼 zhao4zhong1 的回复:] #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！  举报你作弊[/quote] 程序员应当拥有对内存中每个字节读写的权利！[/quote]  感觉破坏了规则，总是会有些问题 不知道在什么情况下需要用到这种奇怪的需求 [/quote] 知道什么叫“热更新”吗？ http://bbs.csdn.net/topics/390627329