二位数组:
二维数组是按行顺序存放;
二位数组是数组的数组;数组名字是数组首地址常量;a[i]表示i行一维数组的首地址;a+i表示ihang首地址;a[i]+j=》&a[i][j;
用一维数组方式引用二维数组元素;
数组下标必须在指定范围内使用;
rand产生随机数;srand为随机数种子,在需要修改随机数种子,使每次产生的随机数不同的时候会使用他;
函数参数的传递方式:不管是值传递还是引用传递,传递给函数的都是变量的副本;
默认值传递类型:基本数据;结构体;共用体;枚举;变量直接存储值;内存通常在栈中分配;
默认引用传递:数组和指针;
函数返回,该函数对应的栈空间销毁;栈空间使相互独立的;
变量作用域:指变量的有效范围;
1;函数内部声明定义的局部变量;作用域仅仅限于函数内部中;
2:形式参数,被当作该函数内的局部变量,如果与全局变量同名会优先使用(就近原则)
在一个代码块中;比如for/if的局部变量,那么这个变量的作用域就在该代码块;
在所有函数函数外部定义的变量叫做全局变量;全局变量系统自动进行初始化;他在全局存储区;占用静态的存储单元;
c内存布局图:

static关键字:
局部变量使用static修饰;被修饰后,称为静态局部变量,声明时没有赋初值,编译器也会把它初始化为0(只会初始化一次);
全局用extern引用;
静态局部static只能应用在本文件中;
宏定义是替换;要注意;;;
返回指针:函数运行后销毁该函数所有的局部数据;这里所谓的销毁并不是将局部数据所占用的内存全部清零,二十放弃对他的使用权限,后面的代码可以使用这块内存;
如果在返回局部变量的地址,需要定义局部变量为static变量静态存储区,生命周期很长,易错点,自己要注意;一个函数总是占用一段连续的内存区域;函数名在表达式中有时候也会被转换成该函数所在内存区域的首地址;指针本身就是一个地址,需要函数指针来接收;
在堆区中分配一个长度为size的连续空间:
1:malloc(100)开辟一个100字节的临时空间,返回值为第一个字节的地址;
2:calloc:分配n个长度为size的连续空间;
3:relloc:重新分配malloc或者calloc函数空间获得的大小(注意看课件)
void*是纯地址,不能指向任何地址,这里要注意分配的空间完成之后要用free释放,释放之后会有空悬指针,要定义为0;(NULL)
动态分配原则:避免分配大量的小内存块;;
仅在需要时分配内存,知要使用完堆上的内存,就需要及时的释放它,否则可能出现内存泄漏;
相关文章: