题目:创建一个三维数组,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 运行效果