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

时间:2016-04-11 16:43:56

标签: c arrays

有人可以帮助我如何在主要功能上传递2D数组吗?我在网上搜索了很多如何返回数组,但指针并没有帮助我。

(Get-AzureRmVm -ResourceGroupName [name of RG]).StorageProfile.OsDisk.Vhd.Uri

2 个答案:

答案 0 :(得分:2)

你有两个问题:拳头是你告诉编译器函数应该返回一个字符,但然后返回一个数组数组。

第二个问题是你试图返回一个局部变量,一个变量会在函数返回后立即消失。

第一个问题的解决方案取决于您为第二个问题选择的解决方案。第二个问题的解决方案是确保返回的变量不会因为static而消失,或者使用动态内存分配为它创建内存。

如果你要创建数组static,你必须记住数组衰变到指向它们的第一个元素的指针,所以一旦P已经衰变,你就会得到char (*)[16]类型的东西。 1}}。

如果使用动态内存分配,它取决于你声明P的内容,但最常见的是使用指向指针的指针,即char **,这就是你应该使用的作为返回类型。

答案 1 :(得分:0)

你必须分配内存。这是一个解决方案。

#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;
}