int* sum(int *mypt,int len){
int i;
int mysum = 0;
for(i=0;i<len;i++)
mysum += mysum;
return &mysum; // I cannot do this since the function frame goes away after the call.
}
int main()
{
int *pt = (int*) malloc(3*sizeof(int));
pt[0] = 0;
pt[1] = 1;
pt[2] = 2;
int *s = sum(pt,3);
printf("%d\n",*s);
return 0;
}
我想返回指向mysum
的指针。我不能int static sum = 0
,因为它是固定的。我不能使用int const sum = 0
,因为它给出了“”readonly“”错误。有解决方案吗?
答案 0 :(得分:6)
为什么你需要从sum()
返回指针,你可以按值返回答案。如果你必须返回一个指针,那么你需要malloc()
sum()
内的内存和sum的调用者必须free()
答案,但这不是很有效。< / p>
int sum(int mypt, len)
{
int i;
int mysum = 0;
for(i=0;i<len;i++)
mysum += mysum;
return mysum; // return the answer by value.
}
如下所示更改main()
:
int main()
{
int *pt = (int*) malloc(3*sizeof(int));
pt[0] = 0;
pt[1] = 1;
pt[2] = 2;
int s = sum(pt,3);
printf("%d\n",s);
return 0;
}
答案 1 :(得分:3)
是的,使用malloc
将整数放入堆内存并获取指针。然后,您可以从函数返回此指针:
int* sum(int *mypt, int len) {
int i;
int* mysum = malloc(sizeof(int));
//make sure you dereference (*) when you wish to work with the value.
*mysum = 0;
for(i=0; i<len; i++) *mysum += *mysum;
return mysum;
}
除此之外,您的代码很多都被破坏了。这只解决了如何返回指针的问题!