21 条回复  ·  269 次点击
wkla 小成 2024-3-30 11:23:01
C++会提示"const char *" 类型的值不能用于初始化 "char *" 类型的实体。C 不会。
不过 C 会把这个字符串存只读段里,所以写的话会报段错误。

我说怎么怪怪的,越看越不对劲。只能说这套该扔就扔吧。
arloor 小成 2024-3-30 22:26:19
//main.cpp  
int a = 0; 全局初始化区  
char *p1; 全局未初始化区  
main()  
{  
      int a = 4; 栈,4 也是存在栈上  
      char s[] = "abc"; 栈  "abc"也是存在栈上
      char *p2; 栈  
      char *p3 = "123456"; 123456\0 在常量区(是在 Data 段上),p3 在栈上。  
      static int c =0 ; 全局(静态)初始化为 0,就是放在 BSS 段   
      p1 = (char *)malloc(10);  
      p2 = (char *)malloc(20);  
      malloc 分配得来得 10 和 20 字节的区域就在堆区。因为属于动态申请分配内存空间  
      strcpy(p1, "123456"); 123456\0 放在常量区,编译器可能会将它与 p3 所指向的"123456"优化成一个地方。  
}
123
返回顶部