厦门网站设计定制,icp备案网站要先建好吗,2023网络营销成功案例,交通运输企业标准建设网站1、stack#xff08;栈#xff09; 编译器自动分配内存#xff08;函数内部定义得局部变量、形参#xff09; 2、堆#xff08;Heap#xff09; 一般由程序员分配释放#xff0c;若程序员不释放#xff0c;程序结束时可能由OS回收#xff08;new和delete#xff09; …1、stack栈 编译器自动分配内存函数内部定义得局部变量、形参 2、堆Heap 一般由程序员分配释放若程序员不释放程序结束时可能由OS回收new和delete 3、Global\Static全局区、静态区 1、全局变量和静态变量的存储是放在一块儿的 2、可以简单认为程序启动全局/静态变量就在此处、程序结束释放 4、Constant常量区 可以理解为所有常量都放在一起该区域内容不可修改、 c内存示例 堆向高地址方向生长 栈向低地址方向生长 所以中间的空白区域会由两者共享增大了内存的利用效率。 观察变量存放位置; 问题 下面哪个语句可以接在const char* p “Hello”;后面 1、p[0]‘A’ 2、p “World”; 3、cinp 4、*(p1)‘e’ 1和4共同的问题表达式必须是可以修改的左值 运算符的左边应该是一个“左值”。所谓“左值”就是指在程序中占用内存空间、可以被修改的量,比如各种变量。 ‘’A‘’是一个字符串常量他一经定义系统就会分配一段地址给他常量区式子左边p[0]也是一个常量地址所以不能用 将一个常量地址赋值给一个常量地址。这也就能回答问题表达式必须是可修改的左值的答案因为p[0]也是一个常量地址。 3、符号方向反了 关于1、4问题的详细解释看这篇文章 C语言中字符串赋值处理方式
char *p,a5;
pa; //显然是正确的
pabcd; //但为什么也可以这样赋值双引号做了3件事 1.申请了空间(在常量区)存放了字符串 2. 在字符串尾加上了’/0’ 3.返回地址 这里就是 返回的地址 赋值给了 p