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