c语言内存问题
发布网友
发布时间:2022-04-28 12:14
我来回答
共5个回答
热心网友
时间:2022-06-27 04:51
答案是C
p1是存储在栈区
p2这个指针是存储在堆区的,因为p2是malloc分配的空间
"123456"是一个常量,所以它是存储在常量区的,并不是存储在栈区
栈区和堆区方向是相反的,一个向下增长,一个向上递减。
热心网友
时间:2022-06-27 06:09
A. P1和p2都存在栈中
错,p2是通过malloc内存动态分配,是在堆上进行的分配
B. P2指向的10个字节内存在栈中
错,理由同A
C. 堆和栈在内存中的生长方向是相反的
错,堆的生长方向不确定,堆栈的生长方向是从顶部向下
D. “123456”这6个字符存储在栈中,如果指针在main()里
正确,如果指针p1在main()里,则指针p1属于局部变量,在堆栈上分配空间。
如果满意,欢迎采纳,谢谢
如有疑问,欢迎追问
热心网友
时间:2022-06-27 07:44
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值
等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能
由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初
始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态
变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
所以你说的1不正确
2 文字常量区和代码区是独立,代码区存放编译后的代码 文字常量区 存放 字符串常量
比如char *p="123455"; 那这个“12345”就放在文字常量区 这个区域不能修改 p指向的内容不能修改
3malloc申请和new申请的在同一个位置 叫堆区 也叫自由存储区
4 malloc等
5解释是const申明的变量 如果不需要地址 编译器会给它优化 把它作为一个常量替换掉出现该变量的地方 比如const a=3;
后面 b=a+b; 编译器直接处理成
b=3+b;
打字不易,如满意,望采纳。追问看了这么久,你选哪个答案,可能多选。
热心网友
时间:2022-06-27 09:35
在main里AC对啊,在main外面就C对了追问为什么?main里 main外 常量不是都在常量区吗?
追答原因在于在main外面的话p1 p2两个指针是放在全局区的,如果在main里面是在栈上面
而对于指向的空间来说在main里面和在main外面都是一样的,不过应该编译有问题才是
p1指向的空间放在只读的数据区里面,p2指向分配在堆里面
热心网友
时间:2022-06-27 11:43
已经有人回答了得很详细了。我就说一下答案
A,C