How do I modify a pointer that has been passed into a function in C? How do I modify a pointer that has been passed into a function in C? c c

How do I modify a pointer that has been passed into a function in C?


You need to pass in a pointer to a pointer if you want to do this.

void barPush(BarList ** list,Bar * bar){    if (list == NULL) return; // need to pass in the pointer to your pointer to your list.    // if there is no move to add, then we are done    if (bar == NULL) return;    // allocate space for the new node    BarList * newNode = malloc(sizeof(BarList));    // assign the right values    newNode->val = bar;    newNode->nextBar = *list;    // and set the contents of the pointer to the pointer to the head of the list     // (ie: the pointer the the head of the list) to the new node.    *list = newNode; }

Then use it like this:

BarList * l;l = EMPTY_LIST;barPush(&l,&b1); // b1 and b2 are just Bar'sbarPush(&l,&b2);

Jonathan Leffler suggested returning the new head of the list in the comments:

BarList *barPush(BarList *list,Bar *bar){    // if there is no move to add, then we are done - return unmodified list.    if (bar == NULL) return list;      // allocate space for the new node    BarList * newNode = malloc(sizeof(BarList));    // assign the right values    newNode->val = bar;    newNode->nextBar = list;    // return the new head of the list.    return newNode; }

Usage becomes:

BarList * l;l = EMPTY_LIST;l = barPush(l,&b1); // b1 and b2 are just Bar'sl = barPush(l,&b2);


Generic answer: Pass a pointer to the thing you want to change.

In this case, it would be a pointer to the pointer you want to change.


Remember, in C, EVERYTHING is passed by value.

You pass in a pointer to a pointer, like this

int myFunction(int** param1, int** param2) {// now I can change the ACTUAL pointer - kind of like passing a pointer by reference }