繁体   English   中英

如何从C中的函数返回2D数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM