gpt4 book ai didi

c - 为什么我们不能使用动态数组作为使用静态数组参数的函数的参数?

转载 作者:行者123 更新时间:2023-11-30 16:42:01 25 4
gpt4 key购买 nike

我正在学习C语言和数据结构。我希望得到一些关于为什么我们不能使用动态数组作为使用静态数组参数的函数的参数的详细解释。

#include <stdio.h>

int sumAry2D_f1(int ary[][3], int rows, int cols);
void freeAry2D(int **ary, int rows);

int main(void)
{
int ary2D[][3] = { {1, 2, 3}, {4, 5, 6} }; // static array

int r, c;
int **ary = (int**)malloc(sizeof(int*) * 2); // dynamic array
for (r = 0; r < 2; r++)
ary[r] = (int*)malloc(sizeof(int)*3);

for (r = 0; r < 2; r++)
for (c = 0; c < 3; c++)
ary[r][c] = r + c; // 0, 1, 2, 1, 2, 3

printf("sumAry2D_f1() %d\n", sumAry2D_f1(ary2D, 2, 3));

// why we can`t function like this?
// printf("sumAry2D_f1~3() %d\n", sumAry2D_f1(ary, 2, 3));

freeAry2D(ary, 2); // free function of dynamic array

return 0;
}

int sumAry2D_f1(int ary[][3], int rows, int cols)
{
int i, j, sum = 0;

for (i = 0; i < rows; i++)
for (j = 0; j < cols; j++)
sum += ary[i][j];

return sum;
}

void freeAry2D(int **ary, int rows)
{
int i;

for (i = 0; i < rows; i++)
free(ary[i]);
free(ary);
}

最佳答案

 // why we can`t function like this?
// printf("sumAry2D_f1~3() %d\n", sumAry2D_f1(ary, 2, 3));

您的函数特别需要一个指向整数指针的指针,该指针指向 3 个整数的序列或 3 元素整数数组的数组,而不仅仅是指向整数指针的任何指针。 ary 只是一个指向整数指针的指针。尽管您使 int **int [][3] 具有相同的结构,但它可能有所不同,并且编译器无法分辨,因为内存分配发生在运行时,因此如果您取消注释代码,它可能无法编译,即使编译了,行为也将是未定义的。

不幸的是,您需要两个函数来完成您想要的操作:

int sumAry2D_f1(int ary[][3], int rows, int cols);

int sumAry2D_f12(int** ary, int rows, int cols);

每个函数内的代码都是相同的。

关于c - 为什么我们不能使用动态数组作为使用静态数组参数的函数的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46064907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com