相关文章推荐
光明磊落的米饭  ·  Download ...·  2 年前    · 
直爽的柿子  ·  XML 格式·  2 年前    · 
不知道这个提法对不对。。。我有一个函数返回值是char**,我得初始化,可以这样char*name[]={"","",""}是吧,这样初始化是3个空的数组。可是这个数组的大小是根据我后面交互操作时选择... 不知道这个提法对不对。。。我有一个函数返回值是char**,我得初始化,可以这样char * name[]={"","",""}是吧,这样初始化是3个空的数组。可是这个数组的大小是根据我后面交互操作时选择的数量来定的,现在初始化不知道怎么确定它的大小,char * name[]=后面可以跟一个可变的数组吗?。。。不晓得说清楚了没

char**类型变量一般用于动态使用 二维数组 ,操作方法如下:

  • 定义char**类型变量,初始化成NULL,或不初始化。

  • 动态获得数组行数num1

  • 分配行指针数组空间

  • 再动态的获得相应的每行的数据个数num2(各行可不同)

  • 为每行分配相应的空间,进行数据存储

  • 应用完成后,要先释放每行的指针

  • 再释放二维指针

参考代码:

#include <stdlib.h> //malloc need
void main()
{
    char **pp=NULL ; //只有在定义时的赋值,才叫初始化,其他位置都叫赋值!
    int i,num1, num2;
    printf("input rows : "); scanf("%d", &num1 );
    pp=(char **) malloc( num1*sizeof(char *) ); //返回一个指向指针类型数据的首地址
    for( i=0;i<num1;i++ )
    {
        printf("input length of string : "); scanf("%d", &num2 );
        pp[i]=(char *)malloc(num2);
        printf("input string : "); scanf("%s", pp[i] );
    }
    //.... 对pp进行应用...
    for( i=0;i<num1;i++ ) //释放内存
        free(pp[i]);
    free(pp);
}