函数和二维数组

要将二维数组作为函数的参数,就必须将数组名视为指针来传递.例如我们以二维数组 int data[3][4] 作为例子.
要将data传递给函数,其函数声明方法有2种:
1 void function(int (*data)[4] , int size)
这个函数声明参数中 int (*data)[4]的意识是data是一个指针他指向一个有4个int值的数组.后面的int size则是数组的行数了.
2void function(int data[][4],int size)
与前一种意义相同,但可读性更强(顺带提一下[]结合方向从左到右).

一个简单的代码如下:

#include<iostream>
using namespace std;
void sum(int (*sum)[4],int size);
void sum2(int sum[][4]);
int
main()
{
    int a[3][4]={ {1,2,3,4},{5,6,7,8},{9,10,11,12}};
    /*输出 a sizeof is 48 */
    /*sizeof()一个运算符,在编译阶段实现其功能,因此 a的类型是数组所以其大小为3*4*4 .int大小为4bytes*/ 
    cout<<"a sizeof is "<< sizeof(a)<<endl; 
    cout<<"int is "<<sizeof(int)<<endl;
    /* 输出 为 a+1 is 5 */
    /*指针加一不是内存地址+1,而是加上指针所指向数据类型加1.那么就看乐意知道a所指向的类型是有4个int值的数组*/
    cout<<"a+1 is "<< **(a+1)<<endl;
    sum(a ,3);
    sum2(a);
}
void
sum(int (*sum)[4] , int size)
 { int *ptr;
    cout<<"int * is "<<sizeof(ptr)<<endl;
    /* (*sum)[4] sizeof is 8 */
    /* 从 8 就可以看出在子函数中sum的类型就是一个指针而不在被解释为一个数组了*/
    cout<<"(*sum)[4] sizeof is"<<sizeof(sum)<<endl;
    cout<<"sum+1 is "<<**(sum+1)<<endl;
;}
void
sum2(int sum[][4])
{   cout<<"sum[][4] is "<<sizeof(sum)<<endl;
}

老实说自学的, 感觉很多还是懵懂的如果有错误希望大家指正,谢谢.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值