[英]How to return a 2D Array from a function in C
有人可以帮助我如何在主函数上传递2D数组吗? 我在网上搜索了很多如何返回数组的方法,但是指针并没有帮助我。
#include <stdio.h>
#include <stdlib.h>
char fillcards(void)
{
int i,j;
srand(8490);
char P[1001][16];
for(i=0; i<1000; i++)
{
for(j=0; j<15; j++)
{
char randomletter="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[rand() % 36];
P[i][j]=randomletter;
}
}
return P;
}
int main(int argc, char *argv[])
{
... // char P[.][.]=fillcards
printf("%s\n", P[1]); // Just to test
system("PAUSE");
return 0;
}
您有两个问题:第一,告诉编译器该函数应返回单个字符,然后返回数组数组。
第二个问题是您尝试返回局部变量,该变量将在函数返回后立即消失。
第一个问题的解决方案取决于您为第二个问题选择的解决方案。 第二个问题的解决方案是通过将返回变量设置为static
来确保返回的变量不会消失,或者使用动态内存分配为其创建内存。
如果您要使数组成为static
数组,则必须记住数组会衰减到指向其第一个元素的指针,因此一旦P
衰减,您将拥有char (*)[16]
。
如果使用动态内存分配,则取决于您将P
声明为什么,但是最常见的是使用指向指针的指针,即char **
,然后将其用作返回类型。
您必须分配内存。 这是一种解决方案。
#include <stdio.h>
#include <stdlib.h>
char** fillcards(void){
int i,j,r=1001,c=16;
srand(8490);
char **P = (char **)malloc(r * sizeof(char *));
for (i=0; i<r; i++)
P[i] = (char *)malloc(c * sizeof(char));
for(i=0;i<1000;i++)
{
for(j=0;j<15;j++){
char randomletter="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[rand() % 36];
P[i][j]=randomletter;
}
}
return P;
}
int main(int argc, char *argv[])
{
char **A=fillcards();
printf("%s\n", A[999]); // Just to test
system("PAUSE");
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.