gpt4 book ai didi

c - 从 C 函数返回指向二维数组的指针

转载 作者:行者123 更新时间:2023-11-30 16:53:15 24 4
gpt4 key购买 nike

我知道有人问过这个问题here , herehere还有很多次,但有些东西还没有起作用。我正在尝试用 C 语言制作卡诺图解算器,我希望我的函数之一将 2D 数组传递回主函数,所以这是我的程序:

    typedef char (*arr)[][4];

int rows;

int main(void){
int noVar;
char *grid;
printf("Please Enter the number of variables: ");


scanf("%d",&noVar);
grid = setMap(noVar);
feedOnes(grid);
}

arr setMap(int noVar){

rows = pow(2,noVar)/4;
char grid[rows][4];
for(int i = 0; i<rows; i++){
for(int j = 0; j<4; j++){
grid[i][j]='0';
}
}
printGrid(grid);
return &grid;
}

这给了我 4 个警告,同时它暂时完成了工作:

    In file included from kmap.c:9:
./setMap.h:33:13: warning: address of stack memory associated with local
variable 'grid' returned [-Wreturn-stack-address]
return &grid;
^~~~
./setMap.h:56:1: warning: control reaches end of non-void function
[-Wreturn-type]
}
^
kmap.c:16:8: warning: incompatible pointer types assigning to 'char *' from
'arr' (aka 'char (*)[][4]') [-Wincompatible-pointer-types]
grid = setMap(noVar);
^ ~~~~~~~~~~~~~
kmap.c:17:12: warning: incompatible pointer types passing 'char *' to parameter
of type 'char (*)[4]' [-Wincompatible-pointer-types]
feedOnes(grid);
^~~~
./setMap.h:36:19: note: passing argument to parameter 'grid' here
int feedOnes(char grid[][4]){
^

我的问题是,我可以解决这些警告吗?这些警告是否会在将来造成任何问题,因为我不知道它们为什么会出现

另外,我是新手,所以如果这个问题没有正确提出,请不要对我严厉。

谢谢。

最佳答案

数组grid[][]setMap()函数的本地数组。一旦该函数返回,该变量就不再可用并且超出范围。 局部变量堆栈内存上声明。

为了让这样的事情发挥作用,您需要使用 malloc( )free() 分别调用函数。

请参阅此链接以了解有关堆栈与堆内存的说明:

What and where are the stack and heap?

请参阅此链接了解C 中的作用域:

https://www.tutorialspoint.com/cprogramming/c_scope_rules.htm

祝你编程愉快!

关于c - 从 C 函数返回指向二维数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40953071/

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