gpt4 book ai didi

c - 如何通过从函数中获取值来声明全局变量

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

我想将 N 和 M 声明为全局变量,但我需要从 int main 中获取 N 和 M 值,那么我该如何实现呢?

#include <stdio.h>
...
int N,M; /*
char board[N][N];
char game_board[N][N]; multiple function using
char (*boardptr)[N]=board;
char (*game_boardptr)[N]=game_board; */
....
int main(int argc,char *argv[])
{
N = atoi(argv[1]);
M = atoi(argv[2]);
....
}

最佳答案

...那么我该如何实现这一点?

C99 及更高版本中,您可以使用 VLA 来设置数组索引的大小,但VLA仅限于本地范围,因此使用此方法,这些在全局范围内都不合法:

char board[N][N];
char game_board[N][N];
char (*boardptr)[N]=board;
char (*game_boardptr)[N]=game_board;

如果需要全局作用域,还需要动态分配:

int N, M;//indices used to dimension arrays can be global scope
int main(int argc, char *argv[])command line args contain two integer values
{
N = atoi(argv[1]); //use argv[1] & [2]. ( [0] is name of program )
M = atoi(argv[2]);

//if global was not a requirement, you could create arrays like this:
char board[M][N];// VLA - no need to use calloc or malloc
//no need to free memory when finished using the array,

//If global scope is require, this method will work:
char **board = Create2DStr(N, M);
///etc...

return 0;
}

char ** Create2DStr(int numStrings, int maxStrLen)
{
int i;
char **a = {0};
a = calloc(numStrings, sizeof(char *));
for(i=0;i<numStrings; i++)
{
a[i] = calloc(maxStrLen + 1, 1);
}
return a;
}

请注意,此处创建的字符串需要释放。

关于c - 如何通过从函数中获取值来声明全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59250034/

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