题目:创建一个三维数组,4*4*4个元素,数字随机生成,找出每行最大的数,每面最大的数,以及整个数组中最大的数的地址,具体实现如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void PrintMaxValByIndex(int(*pData)[4][4], int nRows)
{
int * RowMaxVal[4][4] = { 0 };
int * PlanMaxVal[4] = { 0 };
int nMaxVal = 0;
int i = 0;
int j = 0;
int k = 0;
int * pMaxVal = NULL;
pMaxVal = &pData[0][0][0];
for (i = 0; i < nRows; i++)
{
PlanMaxVal[i] = &pData[i][0][0];
for (j = 0; j < 4; j++)
{
RowMaxVal[i][j] = &pData[i][j][0];
for (k = 0; k < 4; k++)
{
//行
if (pData[i][j][k] > *RowMaxVal[i][j])
{
RowMaxVal[i][j] = &pData[i][j][k];
}
//面
if (pData[i][j][k] > *PlanMaxVal[i])
{
PlanMaxVal[i] = &pData[i][j][k];
}
//体
if (pData[i][j][k] > *pMaxVal)
{
pMaxVal = &pData[i][j][k];
}
}
printf("面%d,行%d的最大值:%d,地址:%p\n", i + 1, j + 1, *RowMaxVal[i][j], RowMaxVal[i][j]);
}
printf("面%d的最大值:%d,地址:%p\n", i + 1, *PlanMaxVal[i], PlanMaxVal[i]);
}
printf("数组最大值:%d\,数组最大值地址:%p\n", *pMaxVal, pMaxVal);
}
void PrintMaxValByPtr(int(*pData)[4][4], int nRows)
{
int * RowMaxVal[4][4] = { 0 };
int * PlanMaxVal[4] = { 0 };
int nMaxVal = 0;
int i = 0;
int j = 0;
int k = 0;
int * pMaxVal = NULL;
pMaxVal = *(*(pData + 0)+0)+0;
for (i = 0; i < nRows; i++)
{
*(PlanMaxVal+i) = *(*(pData+i)+0)+0;
for (j = 0; j < 4; j++)
{
*(*(RowMaxVal+i)+j) = *(*(pData+i)+j)+0;
for (k = 0; k < 4; k++)
{
//行
if (*(*(*(pData+i)+j)+k) > **(*(RowMaxVal+i)+j))
{
*(*(RowMaxVal+i)+j) = *(*(pData + i) + j) + k;
}
//面
if (*(*(*(pData + i) + j) + k) > **(PlanMaxVal+i))
{
*(PlanMaxVal+i) = *(*(pData + i) + j) + k;
}
//体
if (*(*(*(pData + i) + j) + k) > *pMaxVal)
{
pMaxVal = *(*(pData + i) + j) + k;
}
}
printf("面%d,行%d的最大值:%d,地址:%p\n", i + 1, j + 1, *(*(*(RowMaxVal+i)+j)), *(RowMaxVal+i)+j);
}
printf("面%d的最大值:%d,地址:%p\n", i + 1, **(PlanMaxVal+i), *(PlanMaxVal+i));
}
printf("数组最大值:%d\,数组最大值地址:%p\n", *pMaxVal, pMaxVal);
}
int main()
{
int Data[4][4][4] = { 0 };
int i = 0, j = 0, k = 0;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
for (k = 0; k < 4; k++)
{
Data[i][j][k] = rand() % 100;
}
}
}
printf("数组元素:\n");
for (i = 0; i < 4; i++)
{
printf("面:%d\n", i + 1);
for (j = 0; j < 4; j++)
{
printf("行:%d\n", j + 1);
for (k = 0; k < 4; k++)
{
printf("%d ", Data[i][j][k]);
}
printf("\n");
}
printf("\n");
}
printf("\n");
PrintMaxValByIndex(Data,4);
PrintMaxValByPtr(Data, 4);
system("pause");
return 0;
}
运行效果如图1所示:
图1 运行效果