首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

如何返回一组指针(或其引用)

2013-06-25 
怎么返回一组指针(或其引用)有这样一个需要求,在主函数中执行一自定义函数test(),test()返回一组指针(或其

怎么返回一组指针(或其引用)
有这样一个需要求,在主函数中执行一自定义函数test(),test()返回一组指针
(或其引用),因为事先并不知道具体需要内存的大小,只能在test()内部根据
计算结果 num 来 malloc()。 返回的结果必须能在main()使用。 

C指针好难,再多一个*,脑袋都要炸了。调试了好长时间,没成功,主程序中没有能正确调用。 

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

void test(char *str, int *Num, char **arr)
{
int i;
/* 计算内存申请量大小,此处直接赋值代替 */
    int num = 0;
    num = 6;

    *Num = num;/* 返回内存申请量大小的引用 */

    /* 分配内存 */
    char **ar = (char **)malloc(sizeof(char *) * (num));
    memset(ar, 0 , sizeof(char *) * (num));

    /* 将 str 中的字符串的地址存放到 ar 中,便于返回 */
for(i=0;i<6;i++)
{
//printf("%p,%s\n",str,str);
*ar = str;
printf("%p,%s\n",*ar,*ar);
ar++;
str += 4;
}
 
arr = ar;
}

int main()
{
int num = 0;
char *str[] = {"abc","def","123","456","fgh","567"};
char **par = NULL;

    test(*str, &num, &*par);
    //printf("%p\n",&par);
    free(par);
    
    return 0;
}

[解决办法]
如果输入T, 形参类型用T*. 这里我们需要修改char**,所以形参用char***。


#include <stdio.h>
#include <stdlib.h>

void test(char**str, int *Num, char***arr)
{
int i;

/* 计算内存申请量大小,此处直接赋值代替 */

    *Num = 6;/* 返回内存申请量大小的引用 */

    *arr = (char **)calloc(*Num, sizeof(char*));

for(i=0; i < 6;++i)
{
(*arr)[i] = str[i];
}
 
}

int main()
{
int num, i;
char *str[] = {"abc","def","123","456","fgh","567"};
char **par;
    test(str, &num, &par);
    for(i = 0; i < num; ++i)
{
puts(par[i]);
}
    free(par);    
    return 0;
}

[解决办法]
char *str[] = {"abc","def","123","456","fgh","567"};
str[]数组中每个元素的值就是对应的字符指针了,干嘛还要 经过函数计算?
再,void test(char *str, int *Num, char **arr)
这个定义的第一个参数应该是 char** str
[解决办法]
 char **par;

实参是&ptr时  形参就应该是***ptr了

热点排行