// 练习.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <cstdlib> using namespace std; #define N 6 #define M 8 //以int**为参数来传递 void print1(int **arr, int a, int b) { for (int i=0; i<a; i++) { for (int j=0; j<b; j++) { printf("%d/t", *((int*)arr+b*i+j)); } printf("/n"); } } /*用int(*arr)[M]作参数,缺点是数组的列数有限制 注意int arr[N][M]中,arr的类型为 int (*arr)[M],即arr是一个只想int [M]数组的指针,这与int* arr[M]有天壤之别*/ void print2(int (*arr)[M], int a, int b) { for (int i=0; i<a; i++) { for(int j=0; j<b; j++) { printf("%d/t", arr[i][j]); } printf("/n"); } } /*一维数组来模拟二维数组*/ void print3(int *arr, int a, int b) { for (int i=0; i<a; i++) { for (int j=0; j<b; j++) { printf("%d/t", *(arr+i*a+j)); } printf("/n"); } } /*动态生成二维数组*/ void print4(int **arr, int a, int b) { for (int i=0; i<a; i++) { for (int j=0; j<b; j++) { printf("%d/t", arr[i][j]); } printf("/n"); } } int _tmain(int argc, _TCHAR* argv[]) { int arr[N][M]; for (int i=0; i<N; i++) { for (int j=0; j<M; j++) { //下面这两句作用一样 *((int*)arr+i*M+j) = rand()%100; arr[i][j] = rand()%100; } } printf("方法1/n"); print1((int**)arr, N, M); printf("方法2/n"); print2(arr, N, M); /*一般我们可以用一维数组来模拟多为数组*/ int *arr1; arr1 = new int[N * M]; for (int i=0; i< N*M; i++) { arr1[i] = rand()%100; } printf("方法3/n"); print3(arr1, N, M); delete []arr1; /*动态生成二维数组,然后调用方法print()*/ int **arr2; arr2 = new int* [N]; for (int i=0; i<N; i++) { arr2[i] = new int[M]; } for (int i=0; i<N; i++) { for (int j=0; j<M; j++) { arr2[i][j] = rand()%100; } } printf("方法4/n"); print4(arr2, N, M); return 0; }