You need to pass a pointer to a pointer, i.e. int **newlist. In particular, the new list is passed to your function by value, so the new list in mainand inside your function are two completely different variables.
:
#include <stdio.h>
#include <stdlib.h>
int takeEven(int *nums, int numelements, int **newlist) {
int *list = malloc(numelements * sizeof **newlist);
*newlist = list;
int i, found = 0;
for(i = 0; i < numelements; ++i, nums++) {
if ((*nums % 2) == 0) {
*(list++) = *nums;
found++;
}
}
list -= found;
printf("First number found %d\n", *list);
return found;
}
int main()
{
int nums[] = {1,2,3,4,5};
int *evenNums;
int i;
int n = takeEven(nums, sizeof(nums) / sizeof(*nums), &evenNums);
for (i = 0; i < n; ++i) {
printf("%d\n", *(evenNums++));
}
return 0;
}
C-FAQ, :
Q: , :
void f(int *ip)
{
static int dummy = 5;
ip = &dummy;
}
:
int *ip;
f(ip);
.
A: , , ? , C . . , , ( , ):
void f(ipp)
int **ipp;
{
static int dummy = 5;
*ipp = &dummy;
}
...
int *ip;
f(&ip);
- :
int *f()
{
static int dummy = 5;
return &dummy;
}
...
int *ip = f();
. 4.9 4.11.