注册 登录
编程论坛 C语言论坛

关于二维数组的作为参数的3种传递方式,为什么C++语言下的问题

潺潺的小河 发布于 2019-08-04 20:38, 1713 次点击
首先 显示C语言编程下的方式
程序代码:

#include <stdio.h>
main() {
        int a[3][4]  = {
                1,2,3,4,
                5,6,7,8,
                9,1,0,6
        };

        display(a, 3, 4);
        show(a, 3, 4);
        print(a, 3, 4);
}

display(int *q, int row, int col) {
        int i,j;
        for (i=0;i<row;i++) {
                for (j=0;j<col; j++) {
                        printf("%d ",*(q + i*col +j));
                }
                printf("\n");
        }
        printf("\n");
}

show(int (*q)[4], int row, int col) {
        int i,j;
        int *p;

        for (i=0;i<row;i++) {
                p = q + i;
                for (j=0;j<col;j++) {
                        printf("%d ", *(p + j));
                }
                printf("\n");
        }
        printf("\n");
}

print(int q[][4], int row, int col) {
        int i,j;
        for (i=0;i<row;i++) {
                for(j=0;j<col;j++) {
                        printf("%d ", q[i][j]);
                }
                printf("\n");
        }
        printf("\n");
}




我再使用了c++语言 来写
程序代码:
#include<iostream>
using namespace std;

voiddisplay(int *q, int row, int col)
{
        int i,j;
        for (i=0;i<row;i++) {
                for (j=0;j<col; j++) {
                        cout<<*(q + i*col +j);
                }
               
        }
      
};

void show(int (*q)[4], int row, int col) {
        int i,j;
        int *p;

        for (i=0;i<row;i++) {
                p = q + i;
                for (j=0;j<col;j++) {
                         cout<< *(p + j);
                }
               
        }
        
};

void print(int q[][4], int row, int col) {
        int i,j;
        for (i=0;i<row;i++) {
                for(j=0;j<col;j++) {
                       cout<<q[i][j];
                }
               
        }
        

};

int main()
{
        int a[3][4]  = {
                1,2,3,4,
                5,6,7,8,
                9,1,0,6
        };

        display(a, 3, 4);
        show(a, 3, 4);
        print(a, 3, 4);
}



结果很多在关于数组首地址处 有问题! 我自己学C++ 还没学到数组处,这里是建议我使用vector来完成二维数组的功能吗
2 回复
#2
吹水佬2019-08-05 04:33
#include <stdio.h>

void _fun1(int a[2][3])
{
    printf("_fun1:\n");
    int i,j;
    for (i=0; i<2; i++)
    {
        for (j=0; j<3; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    printf("\n");
}

void _fun2(int a[][3], int n)
{
    printf("_fun2:\n");
    int i,j;
    for (i=0; i<n; i++)
    {
        for (j=0; j<3; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    printf("\n");
}

void _fun3(int (*a)[3], int n)
{
    printf("_fun3:\n");
    int i,j;
    for (i=0; i<n; i++)
    {
        for (j=0; j<3; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    printf("\n");
}

void _fun4(int *a, int n, int m)
{
    printf("_fun4:\n");
    int i,j;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
            printf("%d ", *(a+m*i+j));
        printf("\n");
    }
    printf("\n");
}

void _fun5(int *a[], int n, int m)
{
    printf("_fun5:\n");
    int i,j;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    printf("\n");
}

void _fun6(int *a, int n)
{
    printf("_fun6:\n");
    int i;
    for (i=0; i<n; i++)
        printf("%d ", a[i]);
    printf("\n");
}

main()
{
    int a[2][3]= {1,2,3,4,5,6};
    _fun1(a);
    _fun2(a, 2);
    _fun3(a, 2);
    _fun4(*a, 2, 3);
    int i, *b[2];
    for(i=0; i<2; i++)
        b[i] = a[i];
    _fun5(b, 2, 3);   
    _fun6(*a, 6);
}

#3
潺潺的小河2019-08-05 19:07
回复 2楼 吹水佬
您好!我不知道您这<stdio.h>算不算更接入于C还是c++,您能用#include<iostrean> 来完成吗?这样我方便对比我自己程序 出现的错误
1