北京网络公司建站,怎么说服企业做网站,网页设计与制作教程的教学目标,中企动力定制化官网目录 一、C和C对内存的划分 二、小测试 【题目】 【答案】 【解释】 一、C和C对内存的划分 1. 栈区 #xff1a;存储非静态局部变量/函数参数/返回值等等#xff0c;栈是向下增长的。 2. 共享区#xff1a;用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存…目录 一、C和C对内存的划分 二、小测试 【题目】 【答案】 【解释】 一、C和C对内存的划分 1. 栈区 存储非静态局部变量/函数参数/返回值等等栈是向下增长的。 2. 共享区用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存做进程间通信。 3. 堆区 用于程序运行时动态内存分配堆是向上增长的。 4. 全局区(静态区) 也叫做数据段存储全局数据和静态数据。 5. 代码段(常量区) 可执行的代码/只读常量。注意这里的常量指的是字面常量。 二、小测试
//观察如下代码分析变量在内存中的位置
int globalVar 1;
static int staticGlobalVar 1;
void Test()
{static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] abcd;const char* pChar3 abcd;int* ptr1 (int*)malloc(sizeof(int) * 4);int* ptr2 (int*)calloc(4, sizeof(int));int* ptr3 (int*)realloc(ptr2, sizeof(int) * 4);free(ptr1);free(ptr3);
} 【题目】 1. 选择题 选项: A.栈 B.堆 C.数据段(静态区) D.代码段(常量区) globalVar在哪里____ staticGlobalVar在哪里____ staticVar在哪里____ localVar在哪里____ num1 在哪里____ char2在哪里____ *char2在哪里____ pChar3在哪里____ *pChar3在哪里____ ptr1在哪里____ *ptr1在哪里____ 2. 填空题 sizeof(num1) ____; sizeof(char2) ____; strlen(char2) ____; sizeof(pChar3) ____; strlen(pChar3) ____; sizeof(ptr1) ____; 【答案】 1. 选择题 选项: A.栈 B.堆 C.全局区(静态区) D.代码段(常量区) globalVar在哪里_C_ staticGlobalVar在哪里_C_ staticVar在哪里_C_ localVar在哪里_A_ num1 在哪里_A_ char2在哪里_A_ *char2在哪里_A_ pChar3在哪里_A_ *pChar3在哪里_D_ ptr1在哪里_A_ *ptr1在哪里_B_ 2. 填空题 sizeof(num1) _40_; sizeof(char2) _5_; strlen(char2) _4_; sizeof(pChar3) _4/8(32位下是4,64位下是8)_; strlen(pChar3) _4_; sizeof(ptr1) _4/8_; 【解释】 如果数组是一个局部变量那么这个数组被分配在栈上 如果这个数组是动态分配的(malloc出来的)那么这个数组被分配在堆上。局部的指针变量(如题目中的pChar3、ptr1 2 3)也是局部变量是局部变量就会存在栈上。但指针指向的内容(如*pChar3、*ptr1 2 3)不一定存在栈上。const不决定变量的存储位置const关键字只是表示变量的值不能被修改不会影响它的存储位置常量区中的常量指的是数字123这种字面常量所以题目中的pChar3依旧在栈区。字面字符串(如abcd)和数字1一样都是字面常量是在(字面)常量区的。sizeof(数组名) 计算的是整个数组在内存中的大小(字节)。sizeof是运算符计算的是字符串在内存中的大小会算上字符串中的\0。strlen是库函数计算的是字符串的长度不会算上字符串中的\0。 ------------------------END-------------------------
才疏学浅谬误难免欢迎各位批评指正。