二维字符型数组在传参的时候需要注意的是
int SumArray(int a[ ][6] ,int row);//二维整型数组函数声明,注意传参方式
SumArray(a,row); //调用
char printStr(char s[][10], int row); //二维字符型数组声明,需要传递长度
printStr(s,row);//函数调用
与一维字符型变量传参不同,一维字符型变量传参可以忽略数组空间,因为有自己的结束标准,可以在传参的过程中使用“\0”来结束。
总结:在数组传参中只有一维字符型数组传递字符串时,可以不用传递长度。
数组在传递的过程中都是使用指针地址传参的。
标识符、作用域
动态区:局部变量 ,auto 可以修饰变量,放在栈上(自动开辟,自动释放)
静态区:全局变量,以及static修饰的静态变量静态区的变量只会被初始化一次,且不能用其他变量定义。
static可以将局部变量定义在静态变量区。
static修饰全局变量指的是将该变量限定在本文件中。
register int a; //放在cpu寄存器上。建议性。
extren int a; 表示该变量定义在别的文件中, 一般不带初始化。一般不做定义,只做声明。
考点:地址是内存单元上的编号,因此32位电脑和64位电脑由于地址总线的原因,所访问的内存容量被限制。例如32位电脑的内存最大为4g。例如:2^32。
指针
指针的出现使得c语言实现可以操控到硬件层面的功能,重要通过指向地址空间。
指针从定义形式上来讲,以一种区别于整型浮点型的数据类型,其数据空间中存放的是地址编号。
从作用来讲:指针是指向某一特定空间的变量。
指针的形式为: int * p = &a;解释为基类型为int型的指针,指针变量p 存储的是a变量的地址。
在运算中:*p运算理解为间接运算。
总共分三步走:1、取出指针变量p中存储的地址编号。
2、找到地址编号所对应的地址,偏移一个基类型的大小的空间。
3、把这块空间中的值当做一个基类型的变量。
指针与数组的关系。
我们可以认为数组是指针的不断偏移。
数组的变量名代表的是该数组的首地址,也就是指针变量所储存的地址编号。
想要直接在被调函数中修改主调函数,可以使用地址来进行传参。
这也是之前数组为何在调用的时候可以被修改。
指针可以进行*(p + 1):含义是偏移一个基类型大小的空间。
指针的补充
未被初始化的指针变量,我们称为野指针。一般这种指针直接赋值为NULL。