天天看點

二維數組的一些實驗

// 練習.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;

}