C程序内存分配
栈区(stack)
- 由编译器自动分配释放,存放函数的参数名,局部变量名等。堆区(heap)
- 有程序员分配和释放,它与数据结构中的堆
是两回事。全局区(静态区)(static)
- 全局变量和静态变量存储位置文字常量区
- 常量字符串存放位置程序代码区
- 存放函数体的二进制代码
数组
说明
存储一组数据的容器
特点
- 只能存储一种类型的数据
- 有顺序之分,索引从0开始。
定义
元素类型 数组名[元素个数]
int nums[3];
初始化
一般会在数组定义的同时进行初始化
int nums[3] = {2,5,3};
访问
通用下标(索引)访问:nums[1];
二维数组
定义
初始化
- 按行进行初始化
int a[2][3] = { {2, 2, 3}, {3, 4, 5} }; - 按存储顺序进行初始化(先存放第1行,再存放第2行)
int a[2][3] = {2, 2, 3, 3, 4, 5}; - 对部分元素进行初始化
int a[2][3] = { {2}, {3, 4} }; - 如果只初始化了部分元素,可以省略行数,但是不可以省略列数
int a[][3] = {1, 2, 3, 4, 5, 6};
字符串
- char a[] = “123”; 和 char a [] = {‘1’,’2’,’3’};的区别,可以比较大小
- “123”其实是由’1’、’2’、’3’、’\0’组成
- 字符串的输出”%s”,’\0’是不会输出的
字符串数组
- char names[2][10] = { {‘J’,’a’,’y’,’\0’}, {‘J’,’i’,’m’,’\0’} };
- char names2[2][10] = { {“Jay”}, {“Jim”} };
- char names3[2][10] = { “Jay”, “Jim” };
常用字符串函数
- strlen(字符数组名或字符指针变量);字符串测长函数
- strcat(字符串1的地址,字符串2的地址);将字符串2的内容连接到字符串1的尾部。
- strcmp(字符串1的地址,字符串2的地址);比较串1和串2哪个比较大。比较大小的依据是,两个字符串从左往右相应位置上第一个不相等的字符ASCII码值之差
- strcpy(字符串1的地址,字符串2的地址);将字符串2的内容复制到字符串1内。