People Lack Willpower,Rather Than Strength!
1.二维数组与参数
-
1.二维数组的元素作为函数参数
- 二维数组的元素就相当于基本数据类型变量,作为函数参数与变量相同
-
2.二维数组中的一维数组作为函数
- 二维数组的一维数组实际上就是一个一维数组,作为函数参数与一维数组相同
-
3.二维数组作为函数参数
- 二维数组作为函数参数是地址传递
函数形参 void test(char c[][x]);- 二维数组作为函数形参,参数中一维数组的元素个数不可以省略:c[][x]√
- 二维数组作为函数参数,在被调函数中不能获得其有多少行,需要通过参数传入
- 二维数组作为函数参数,在被调函数中可以计算出二维数组有多少列:sizeof(c[0])
- 二维数组作为函数参数是地址传递
2.字符串
-
1.概念
- 字符串是位于双引号中的字符序列. 在内存中以“\0”结束,所占字节比实际多一个!
-
2.字符串的初始化
- 在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。
所以问题是如果用指针定义一个字符串(char *p = "abc";),而指针又不能用来存放字符串,该字符串放哪里了???? 答:放在常量区!⭐️
3.字符串的输入
char ch[10];
scanf("%s",ch);
// 应该是:string\0再回车吧!错,不用加\0,因为一旦输入字符,未满10个,那么后面的空位会自动填充0!
但是:
char c[5];
c[0] = '0';
printf("%d\n",c[2]);// 乱码
3.指针基本概念
-
变量地址:系统分配给"变量"的"内存单元"的起始地址!
- 由于通过地址能找到所需的变量单元,可以说地址指向该变量单元。因此将地址形象化的称为“指针”. 这么说来地址就是指针常量.用来存放该常量的变量就是指针变量,且该变量只能存储地址! ⭐️
-
指针变量定义说明:变量类型 *p
- 变量类型:说明该指针变量适用于存放该类型数据的首地址(但不绝对); 用该指针变量取值时,是以该类型为单位进行的!
指针也可以被声明为全局、静态局部和局部的.
疑问:地址是常量数据的,还是内存单元的,亦或是其管理者-变量的?⭐️ 应该是变量的吧?好像不可以对常量取地址! 好像又不对,"string"这样字符串不是可以赋值给指针变量吗? "在计算机中所有数据都存储在内存单元中,而每个内存单元都有一个对应的地址, 只要通过这个地址就能找到对应单元中存储的数据." 由这句话可以看出地址是属于内存单元的!
-
什么是野指针?空指针?
- 获得未知内存空间首地址的指针变量!⭐️
- 获得NULL值(ox0)的指针变量!
NULL/nil is an rvalue(右值) of type 'void *',address of which cannot be taken ! 所以,我们可以简单把NULL当做指针常量(地址),值为ox0!