指针作为参数

  • 数组作为参数
    1. 地址传递
    2. 传参为指针:定义了一个普通指针p指向了这个数组

二维数组作为参数

int sum(int a[][5],int len) //行指针要体现出列数,5列,光有列还不够,必须有行约束len
//有了行列,而为数组的大小就固定下来了,我们就可以对二维数组就行操作了
{
    ...
}
{
    int a[10][5]={...};
    ...sum(a,10);//第一个参数行指针,一般表示为 a , a+1, a+2 ...
}

#include <iostream>
using namespace std;

//行指针的方式传递参数
int sum1(int a[][4],int len){
    int i,j,s=0;
    for (i=0; i<len; i++) { //先遍历行
        for (j=0; j<4; j++) {//再遍历列
            s+=a[i][j];
        }
    }
    return s;
}
// 另一种写法
int sum3(int a[][4],int len){
    int i,j,s=0;
    for (i=0; i<len; i++,a++) { //先遍历行
        for (j=0; j<4; j++) {//再遍历列
            s+= *(*a+j);
        }
    }
    return s;
}

//行指针另一种写法传递参数
int sum2(int (*p)[4],int len){
    int s=0;
    for (int i=0; i<len; i++,p++) { //p作为行指针m,也可以跟着i往下走
        for (int j=0; j<4; j++) {
            s += *(*p+j); //p是往下走的,所以没有行上的偏移量
        }
    }
    return s;
}

int main(int argc, const char * argv[]) {
    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    cout<<"sum1:"<<sum1(a, 3)<<endl; //78
    cout<<"sum3:"<<sum2(a, 3)<<endl; //78
    cout<<"sum2:"<<sum2(a, 3)<<endl; //78
    return 0;
}

results matching ""

    No results matching ""