二维数组作为函数参数的几种方法

给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。
**例如,若N=5,有下列矩阵: 1 2 3 4 5 计算结果为:1 0 0 0 0*/

#include <stdio.h> #define N 5 void fun1(int a[N][N]) { int i,j; for (i=0;i<N;i++) { for (j=0;j<N;j++) { if (i>j) { a[i][j]+=a[j][i]; a[j][i]=0; } } } }
void fun2(int **a,int m,int n) { int i,j; for (i=0;i<m;i++) { for (j=0;j<n;j++) { if (i>j) { *((int *)a+i*m+j)+=*((int *)a+j*m+i); *((int *)a+j*m+i)=0; } } } } void fun3(int *a,int m,int n) //数组按行存储,可以看做一位数组,存取位置要自己控制
{
int i,j; for (i=0;i<m;i++) { for (j=0;j<n;j++) { if (i>j) { *(a+i*m+j)+=*(a+j*m+i); *(a+j*m+i)=0; } } } } int main() { int b[5][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7},{4,5,6,7,8},{5,6,7,8,9}}; //fun1(b); //fun2((int **)b,5,5); fun3(*b,5,5); for (int i=0;i<5;i++) { for (int j=0;j<5;j++) { printf("%3d ",b[i][j]); } printf("\n"); } return 0; }

//数组按行存储

如果二维数组知道一维长度,只有一个维数长度为变量,可以用数组指针。

数组名的指针,即数组首元素地址的指针。即是指向数组的指针。
例:int (*p)[10]; p即为指向数组的指针,又称数组指针。
int a[4][5];int (*p)[5]=a;
void fun4(int (*a)[5],int m)
{
    int i,j;
    for (i=0;i<m;i++)
    {
        for (j=0;j<5;j++)
        {
            if (i>j)
            {
                *(*(a+i)+j)+=*(a[j]+i);
                *(a[j]+i)=0;

            }
        }
    }
    
}

int (*p1)[5];
    int **p2;
我觉得上面两个相似。只有一些小小的不同..
p1指向一维数组的指针

p2是一个指向指针的指针,没有自己的内存区域。可以随意指向任意一块内存区域.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值