11、二维数组、数组参数和指针参数

1. 二维数组

  内存不是表状的,而是线状的,二维数组也是线性存储的,如char a[3][4]

  11. <wbr>二维数组、数组参数和指针参数

二维数组的另一种表示方法: *(*(a+i)+j) =  a[i][j]

2. 一维数组参数

形参:指声明或定义函数时的参数

实参:在调用函数时主调函数传递过来的实际值   

        void fun(char a[10])   //a[10]为形参

         {

            char c = a[3];

         

        int main()

         {

            char b[10] = "abcdefg";

            fun(b[10]);   //b[10]在这里是个字符常量,而非数组,为实参,这里应改为fun(b)

            return 0;

         }

程序错误分析:

1)首先,b[10]数组越界,虽然在编译的时候没有实际地址取值,但当程序运行时会发生越界错误

2)其次,编译器需要的是一个char *类型的参数,而实际传过去的是一个char类型的参数

 

重要结论:

1.C语言中,当一维数组作为函数参数时(即形参),编译器总是把它解析成一个指向其首元素首地址的指针

2.C语言中,所有非数组形式的数据实参均以传值形式调用,即对实参做一份备份并传递给被调用的函数,函数不能修改作为实参的实际变量的值,而只能修改传递给它的那份备份     

 

3. 一级指针参数

 

 

4. 二级数组参数和二级指针参数

  void fun(char a[3][4]);

可以把 a[3][4]理解成一个一维数组a[3],其每个元素都是一个含有4个char类型数据的数组,可以改写为

  void fun(char (*p)[4]);

 

数组参数           等效的指针参数

char a[3][4]       char (*p)[4]

char *a[5]         char **p

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值