zoukankan      html  css  js  c++  java
  • 二维数组作为函数参数的几种方法

    给定程序中,函数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(" "); } 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是一个指向指针的指针,没有自己的内存区域。可以随意指向任意一块内存区域.

  • 相关阅读:
    CF1539 VP 记录
    CF1529 VP 记录
    CF875C National Property 题解
    CF1545 比赛记录
    CF 1550 比赛记录
    CF1539E Game with Cards 题解
    CF1202F You Are Given Some Letters... 题解
    vmware Linux虚拟机挂载共享文件夹
    利用SOLR搭建企业搜索平台 之九(solr的查询语法)
    利用SOLR搭建企业搜索平台 之四(MultiCore)
  • 原文地址:https://www.cnblogs.com/Yogurshine/p/3819852.html
Copyright © 2011-2022 走看看