Vì vậy, tôi có một số mã, loại như sau, để thêm một struct vào một danh sách các cấu trúc:Làm cách nào để sửa đổi một con trỏ đã được chuyển vào một hàm trong C?
void barPush(BarList * list,Bar * bar)
{
// if there is no move to add, then we are done
if (bar == NULL) return;//EMPTY_LIST;
// allocate space for the new node
BarList * newNode = malloc(sizeof(BarList));
// assign the right values
newNode->val = bar;
newNode->nextBar = list;
// and set list to be equal to the new head of the list
list = newNode; // This line works, but list only changes inside of this function
}
Những cấu trúc được định nghĩa như sau:
typedef struct Bar
{
// this isn't too important
} Bar;
#define EMPTY_LIST NULL
typedef struct BarList
{
Bar * val;
struct BarList * nextBar;
} BarList;
và sau đó trong một nộp tôi làm điều gì đó như sau:
BarList * l;
l = EMPTY_LIST;
barPush(l,&b1); // b1 and b2 are just Bar's
barPush(l,&b2);
Tuy nhiên, sau này, l vẫn trỏ tới EMPTY_LIST, không phải là phiên bản sửa đổi được tạo ra bên trong barPush. Tôi có phải vượt qua danh sách như một con trỏ đến một con trỏ nếu tôi muốn sửa đổi nó, hoặc là có một số câu thần chú tối khác cần thiết?
Cảm ơn, tôi đã nhận ra đây là vấn đề, nhưng hy vọng rằng nó không phải là;) –
Hoặc, có chức năng trả về con trỏ đến đầu mới của danh sách. BarList * barPush (danh sách BarList *, Bar * bar) –