二维数组
二维数组可以看成多个一维数组构成
int arr【2】【3】2代表行号,3代标列数
访问二维数组
数组名+行下标+列下标
二维数组内存分配:连续存储
第i行首元素的地址:&arr[i][0]===>arr[i]===>(arr+i)===>arr+i
第i行第j列元素的地址:&arr[i][j]==>arr[i]+j==>(arr+i)+j
第i行第j列元素:arr[i][j]==>(arr[i]+j)==>((arr+i)+j)
int (p)[3]=arr;
只要arr能用的地方P都能用
函数定义
1)不能嵌套定义(只能定义在外面)
2)不能与系统提供的函数名相同
3)函数不能重复定义
4)如果函数的数据类型是int char float等等 那么这个函数必须要有return
return 后面值的类型必须要与函数 的数据类型保持一致
5)如果函数的数据类型是void那么函数可以有return也可以没有return,如果有return的话,return后面没有值
6)函数定义时形参的个数,必须要与函数调用实参个数相同
7)形参变量的类型及时相同也不能省略数据类型,比如:
void sum(int a,b)错误;必须要写成 void sum(int a,int b)
8)形参个数可以是多个,没有限制;形参变量的数据类型可以各不相同
函数定义格式
数据类型 函数名()
{
}
数据类型: int char float double void
函数的使用
函数的调用 函数名();
数据类型 函数名(数据类型 函数名 , 数据类型 函数名)
1)形式参数
形式上的参数,在函数定义的时候存在
实参:有实际意义的参数,在函数条调用的时候存在
return 在函数中的作用
1)当函数碰到return时,该函数return下面的语句不会被执行
2)将return后面的值返回给函数调用者
函数的递归:函数自己调用自己
局部变量:定义在函数内部的变量
全局变量:定义在函数外面的变量
如果全局变量和局部变量同名,全局变量相当于不存在
变量按生存期分
静态变量
自动变量
——局部变量
静态局部变量
自动局部变量
作用域只能决定访问性
——全局变量
静态全局变量
自动全局变量
————————————————————————————————————
函数指针
void (p)()=test;
先算(p),代表p是一个指针变量,再算(),代表将来p这个指针执行一个没有形式参数的函数,在看void,代表p指向的这个函数返回值是void类型的
函数名就是函数的入口地址
p()相当于test()
指针函数:函数的返回值是指针