gpt4 book ai didi

c - 如何编写一个可以同时采用动态/静态分配的二维数组的 c 函数?

转载 作者:太空狗 更新时间:2023-10-29 15:02:10 25 4
gpt4 key购买 nike

<分区>

我有一个函数应该将二维数组作为参数,我的代码如下所示 --

#include <stdio.h>
#include <stdlib.h>

void func(double**, int);

int main()
{
double m[3][3] = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}};
func(m, 3);
}

void func(double **m, int dim)
{
int i, j ;
for(i = 0 ; i < dim ; i++)
{
for(j = 0 ; j < dim ; j++)
printf("%0.2f ", m[i][j]);
printf("\n");
}
}

然后编译器说——

test.c: In function ‘main’:
test.c:9:2: warning: passing argument 1 of ‘func’ from incompatible pointer type [enabled by default]
func(m, 3);
^
test.c:4:6: note: expected ‘double **’ but argument is of type ‘double (*)[3]’
void func(double**, int);
^

但是当我说——

int main()
{
int i, j;
double m[3][3] = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}};
double **m1 ;
m1 = (double**)malloc(sizeof(double*) * 3);
for(i = 0 ; i < 3 ; i++)
{
m1[i] = (double*)malloc(sizeof(double) * 3);
for(j = 0 ; j < 3 ; j++)
m1[i][j] = m[i][j] ;
}
func(m1, 3);
for(i = 0 ; i < 3 ; i++) free(m1[i]);
free(m1);
}

它编译并运行。

有什么方法可以使 func() 获取静态/动态定义的二维数组吗?我很困惑,因为我正在传递指针 m,为什么第一种情况不正确?

这是否意味着我需要为两种不同类型的参数编写两个单独的函数?

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