鱼C论坛

 找回密码
 立即注册
查看: 2655|回复: 3

char s[] = “abc”;与char *p3 = “123456”; 两个字符串存储在不同区域吗????

[复制链接]
发表于 2020-1-5 21:54:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
https://www.21ic.com/tougao/article/12884.html
上面帖子里面一段代码,标注了相关变量所在的内存区域,关于内存分配的问题:
*********以下代码引用自上面链接*************

//main.c

int a = 0; //a在全局初始化数据区

char *p1; //p1在bss区(未初始化全局变量)

static int c = 0; //c在全局初始化数据区(c是全局静态变量)

struct employee

{

char name[20];

int age;

float score;

}e1; //e1在全局初始化数据区

int main()

{

int b; //b在栈区(局部变量)

char s[] = “abc”; //s在栈区,“abc”在常量区(全局初始化数据区)

char *p2; //p2在栈区

char *p3 = “123456”; //p3在栈区,“123456”在常量区(全局初始化数据区)

static int d = 0; //d在全局初始化数据区(静态局部变量)

struct student

{

char *name; //name在栈区,name指针指向是在堆区

int age;

float score;

}s1; //s1在栈区

p1 = (char*)malloc(10); //分配得来的10个字节的区域在堆区

p2 = (char*)malloc(20); //分配得来的20个字节的区域在堆区

name = (cahr *)malloc(20); //分配得来的20个字节的区域在堆区

/*从常量区的“Hello World”字符串复制到刚分配到的堆区*/

strcpy(p1, “Hello World”);

free(p1); //释放内存

free(p2); //释放内存

}

我在实际测试中:
char s[] = “abc”;     //可以读写
char *p3 = “123456”;  //只读
我的困惑是,这两个字符串存储的区域不一样吧??!!??


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-6 11:14:38 From FishC Mobile | 显示全部楼层
我觉得是你没看懂他想表达什么。

s这个变量在栈区,"abc"这个字符串在常量区;
char s[]="abc"
是拿"abc"这个常量字符串去初始化s。s能够修改是因为s里的"abc"根本不是原来的常量字符串"abc"。

p这个变量在栈区,"123456"这个字符串在常量区。
p指向"123456",你不能修改*p是因为你不能修改常量字符串。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-10 23:57:20 | 显示全部楼层
  我被堆、栈、初始化变量区、未初始化变量区、动态存储区、静态存储区这些概念整蒙圈了

    char *str1;
    str1 = "abcdef";
    char str3[] = "abdfhjk46";
    char str2[] = "abasasa";

    printf("str1 add:%p\n",str1);
    printf("str2 add:%p\n",str2);
    printf("str3 add:%p\n",str3);
运行结果:
str1 add:00404069
str2 add:0060FEEA
str3 add:0060FEF2

大概算了一下:0060FEEA-00404069 大约20 BE81‬(2M左右存储间距),
这两个变量在不在同一存储区域?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-29 00:06:53 | 显示全部楼层
printf("str1 add:%p\n",&str1);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 05:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表