01/10/2018, 09:13

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.

James viết 11:20 ngày 01/10/2018

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:

  • 1 là : hàm initList return head;
    và trong hàm main phải sửa lại là : h = initList(h, &c);
  • 2 là : sửa lại khai báo của hàm initList thành
    void initList(struct node *& head, int* count); thì không cần return.
    Bạn thử xem có đc ko
Sơn viết 11:15 ngày 01/10/2018

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.

Bài liên quan
0