二级指针,二维数组做形参
// pointpoint.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
#define ROW 3
#define COL 4
int **sum0(int **arr, int row, int col, int *retSize, int **retColSize)
{
int **ret = (int **)malloc(row * sizeof(int *));
//*retColSize = (int *)malloc(row * sizeof(int));
int *colSize = (int *)malloc(row * sizeof(int));
*retSize = row;
for (int i = 0; i < row; i++) {
colSize[i] = col;
ret[i] = (int *)malloc(colSize[i] * sizeof(int));
int sum = 0;
for (int j = 0; j < col; j++) {
sum += *((int *)arr + i * col + j);
ret[i][j] = sum;
}
}
*retColSize = colSize;
return ret;
}
void testcase0(void)
{
int arr[ROW][COL];
int cnt = 0;
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
cnt++;
arr[i][j] = cnt;
}
}
int retSize;
int *retColSize;
//arr实际是int (*)[4]
int **sum = sum0((int **)arr, ROW, COL, &retSize, &retColSize);
for (int i = 0; i < retSize; i++) {
for (int j = 0; j < retColSize[i]; j++) {
printf("%d, ", sum[i][j]);
}
printf("\n");
}
}
int **sum1(int (*arr)[COL], int row, int *retSize, int **retColSize)
{
int **ret = (int **)malloc(row * sizeof(int *));
//*retColSize = (int *)malloc(row * sizeof(int));
int *colSize = (int *)malloc(row * sizeof(int));
*retSize = row;
for (int i = 0; i < row; i++) {
colSize[i] = COL;
ret[i] = (int *)malloc(colSize[i] * sizeof(int));
int sum = 0;
for (int j = 0; j < COL; j++) {
sum += arr[i][j];
ret[i][j] = sum;
}
}
*retColSize = colSize;
return ret;
}
void testcase1(void)
{
int arr[ROW][COL];
int cnt = 0;
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
cnt++;
arr[i][j] = cnt;
}
}
int retSize;
int *retColSize;
//arr实际是int (*)[4]
int **sum = sum1(arr, ROW, &retSize, &retColSize);
for (int i = 0; i < retSize; i++) {
for (int j = 0; j < retColSize[i]; j++) {
printf("%d, ", sum[i][j]);
}
printf("\n");
}
}
int main()
{
testcase0();
testcase1();
return 0;
}