形参一维可以省略,长度不能直接获得(计算长度时会将数组当做指针),需要在实参中输入。
例如: int array(int a[3][4,int row]);其在计算机中实际以 int array(int (*a)[4],int row)存在。
位数——总线宽度(总线用以传输数据)———1.数据总线 2.控制总线 3.地址总线
在二维字符数组形式上,需要传递行数,因为操作多个字符串
实参:实参要有数组名与行数,如:array(a,row);
函数名(数组名,行数)
作用域:作用范围
局部变量-----一定在某一个{}范围内
全局变量-----不在任何一个{}范围内
可见性:
程序运行到某个点,哪些标识符可见。
定义的标识符作用范围为上下两个花括号{}范围内,中间嵌套的花括号如果不另作定义,那么定义的值仍可以用。若内层与外层有同名标识符,则外层的被屏蔽。
在时间上:
动态变量:自动申请自动释放,从定义时属于的语句开始,到语句结束时结束。
静态变量:全局变量,在运行前同时存在不分先后,因此,在运行全局变量的时候,不能先 定义一个确切变量(int a=10),再将该变量赋予另一个变量(int b=a)。(只能被 初始化一次)
例外:static加局部变量,使局部变量存到了全局区,成为静态变 量。
static加全局变量,将该变量限定在本文件中,使exterb无 效。
也可加函数前,效果全局变量一样。
register int a: 将a存到cpu寄存器中(建议性),使用后不 可进行取地址操作。
extern int a; //拓展,表示该变量不在文件中,可以去其他文件中找(只能拓展其他文件的 全局变量),一般使用于再多文件编程中,如果想使用,可以用此函数作声 明。(编译时需要一起编译,如:gcc 1.c 2.c)
也可加函数前,效果一样。
在函数中,只有一维数组不需要传递长度(“\0”作为结束符)
特点:直接操作硬件
难点:缝合————指针+数组 / 函数 / 数据类型 / 指针自身
原理:内存的位置有具体编号,因此可以通过编号查找到他的位置。
数据类型——指针类型:储存的就是地址的位置编号
语法:基类型* 指针变量名 = &空间变量名;
基类型----数据类型,指针变量指向目标的数据类型
* -----表示此时定义的变量 是一个指针类型的变量,其为单目运算,运算数必须是指 针类型的值(地址)
指针变量名-----见名知意,类型与基类型一致。
&空间变量名---获得空间的地址编号
例如:int *p; // 表示定义了一个指针类型的变量
1.先拿出p变量中的值(地址)到内存中定位
2.从定位处开始,偏移出sizeof(基类型)大小的一块空间
3.把这块空间当做一个基类型变量来看 //运行一次,访问一次该地址中的值
运用:被调修改主调
1.想修改谁,就把谁的地址传过去
2.必须做*运算,实现修改。
p+1 指向了下一个基类型的数据,如在int 条件下,int p+1;若p的首地址为0x0000,则p+1的地址为0x0004.
数组的本质就是指针,*(p+i)等于p[i]
细节:对数组取空间变量名,不需要取值(&),直接输入即可