读书人

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

发布时间: 2013-06-25 23:45:41 作者: rapoo

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

读书人网 >C语言

热点推荐