怎么返回一组指针(或其引用)
有这样一个需要求,在主函数中执行一自定义函数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;
}