gpt4 book ai didi

c - 使 int foo(int bar[][N]) 与 int ** baz 一起工作

转载 作者:太空宇宙 更新时间:2023-11-04 05:54:47 25 4
gpt4 key购买 nike

我有一个具有以下原型(prototype)的函数:

int foo(int bar[][N]);

我想将变量 int ** baz 发送给它,这是一个大小相同的数组,只是它被分配了。

我尝试像这样显式地转换和调用 foo():foo((int(*)[N])baz); 它消除了来自编译器,但 baz 中的所有值在 foo() 中都变成了垃圾(顺便说一句,为什么会这样?)。

有没有一种方法可以在不复制相同功能并更改其原型(prototype)的情况下执行此操作?

baz 是这样分配的:

int ** baz = (int**)malloc(N*sizeof(int*));
for (i = 0; i < N; i++)
baz[i] = (int*)malloc(N*sizeof(int));

最佳答案

像分配 baz

int ( *baz )[N] = malloc( N * N * sizeof( int ) );

这样的话调用函数是没有问题的

int foo(int bar[][N]);

带有参数 baz

考虑到您的评论,动态分配二维数组并返回指向它的指针的函数可能看起来像

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

#define N 10

typedef int ( *PTR )[N];

PTR allocate( int n );

int ( *allocate( int n ) )[N]
{
int ( *p )[N] = malloc( n * sizeof( *p ) );

return p;
}

int main( int argc, char * argv[] )
{
free( allocate( N ) );

return 0;
}

我展示了函数声明的两种方式。

关于c - 使 int foo(int bar[][N]) 与 int ** baz 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30131020/

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