Thay đổi địa chỉ của biến, bằng dùng hàm con
Em gặp một số vấn đề khi tạo cơ sở dữ liệu list bằng c. ở đây em ko thể thay đổi được địa chỉ của biến bằng hàm con mong mọi người cho ý kiến.
Đây là hàm khởi tạo list.
void initlist(struct node* head,int* count){
head = NULL ;
*count=0 ;}
chương trình của em như sau tất nhiên là e đã khai báo một struct kiểu node ở trước :
int main(){
int c;
struct node * h= (struct node*)malloc(sizeof(struct node));
printf("%d
",h);
initlist(h,&c);
printf("%d
",h);
h=NULL;
printf("%d
",h);
}
thì địa chỉ trước va sau khi gọi hàm init là như nhau chỉ khi em gán địa chỉ NULL cho h trong hàm main thì giá trị mới được thay đổi :(.
vậy nên có phải là ko thể dùng hàm con để thay đổi giá trị địa chỉ của một biến ko ạ tại sao lại thế ạ. em cảm ơn mọi người.
bạn có thể hiểu thế này: Khi truyền h vào hàm initList thì chỉ là truyền bản sao của h. Trong hàm đó gán h = NULL, sau khi ra khỏi hàm thì ko làm ảnh hưởng đến h !
Nếu bạn muốn thay đổi h thì có 2 cách:
và trong hàm main phải sửa lại là : h = initList(h, &c);
void initList(struct node *& head, int* count); thì không cần return.
Bạn thử xem có đc ko
khi truyền h vào initlist thì địa chỉ của h lưu giữ sẽ được copy vào tham số head. Vậy thì thông qua tham số head ta chỉ có thể thay đổi đc nội dung trong node h, chứ không thể thay đổi được địa chỉ của h.