char s1[] = "hello1";
char *s2 = "hello2";
区别如下:
1)存储区域不同
s1、s2均存储在栈中;
"hello1"存储在栈中,因为它是一个字符串数组;
"hello2"存储在常量存储区;
另注:C++程序占用的内存总共分为5部分:栈区(局部变量)、堆区(malloc)、全局/静态存储区(全局变量、静态变量)、常量区(常量)和代码区(代码)。
2)sizeof结果不同
sizeof(s1) = 7; // 6个字符加一个'\0'
sizeof(s2) = 4; // 指针的大小
3)能否改变元素
对于s1,可以这样修改元素:*s1 = 'x';
对于s2,操作 *s2 = 'x'; 则是非法的;
本文深入解析了C语言中字符串数组与常量的区别,包括它们的存储区域、sizeof结果以及是否允许元素修改。同时,文章强调了这在实际编程中的重要性,帮助开发者更好地理解和运用这些概念。

被折叠的 条评论
为什么被折叠?



