常用的三种数组初始化:
int arr[][4] = {{元素}, {元素},{元素},{元素}};
二维数组本质:
每个元素是一维数组的特殊一维数组;
二维数组与函数:
1. 同一维数组一样, 当作为函数参数的时候, 函数的内部与数组对应的其实是一个指针
2. 所以在作为函数参数的时候, 需要同时传入行, 列
3. 在形参中的二维数组, 行数可以省略, 但是列数不能省略, 实参中对应的二维数组, 行数可以任意, 但是列数必须保持一致
void test(int rows, int cols, int arr[][cols]);
字符串:
%s的原理, 占位的时候, 直接对应的并不是字符串数组的值, 因为数组名默认代表的是数组首地址, 所以其实对应的是字符串数组的地址
字符串长度:
不能直接sizeof数组长度
普通方法: 从第一个字节开始计数, 直到遇到’\0’为止
字符串常用函数:
6个
上课笔记:
指针:
1. 变量在内存中的存储
1. 不同的变量在内存中占据不同的字节空间
2. 内存当中存储数据最小基本单位:字节, 每一个字节, 都有对应唯一的 地址 ——一个十六进制的数
3. 声明一个变量, 在内存中, 从高字节向低字节分配连续的指定字节数的空间
4. 任何数据在内存中都是以其二进制补码形式存在的, 由低位存到高位存储
5. 变量的值: 变量中存贮的值
6. 变量的地址: 变量的低字节的地址
2. 指针变量
1. 首先它是一个变量
2. 其次它是一个存放地址的变量
3. 然后它存放的是另一个变量的地址
4. 通过这个地址就可以间接的访问另一个变量
5. 声明的时候, 可以把数据类型 和 * 写在一起 int* p1 不要 int *p1(到了后期熟练了随意)
6. 所以不能把一个非地址类型的常量赋给指针
也不能直接把变量赋值给指针
7. 指针变量智能存储和指针变量类型相同的普通变量的地址, 否则会出问题
指针变量作为函数的参数:
1. 为什么要用?: 函数的返回值return只能有一个, 但是很多时候需要函数返回的不止一个值, 这时候, 可以通过定义指针变量作为形参, 通过指针实现地址的传递, 从而直接对形参进行操作, 可以获得多个返回值
2. 通过指针变量, 函数可以不需要值的传递, 而只需地址的传递, 甚至连返回值都不需要, 就可以实现对实参的修改
一点建议: 以后如果需要在函数中使用数组作为参数的时候, 直接写一个指向数组的指针最好
下标(索引)的本质:
1. 指针变量后面可以使用中括弧, 在中括弧中写上下标可以来访问数据
2. p1[n], 完全等价于 *(p1+n), 前提是p1必须是一个指针
3. 只要是指针, 都可以使用中括弧下标