Về cơ bản, tôi muốn biết tại sao điều này lại xảy ra (chuyển địa chỉ bộ nhớ của danh sách dưới dạng tham số):
void init_lista (elemPtr *list) {
*danh sách = NULL;
}
int chính(){
danh sách elemPtr;
init_list(&list);
//[...]
}
Không giống như thế này (chỉ truyền nội dung của danh sách):
void init_lista (danh sách elemPtr) {
danh sách = KHÔNG;
}
int chính(){
danh sách elemPtr;
init_list(danh sách);
//[...]
}
OBS: elemPtr là kiểu con trỏ của cấu trúc (typedef struct elem *elemPtr
).
tôi đến từ&
Và*
Người ta hiểu rằng cái đầu tiên sẽ nhận địa chỉ bộ nhớ của var và cái sau sẽ nhận giá trị mà nó đề cập đến. Theo khái niệm này, hai phần mã phải tương đương nhau, nhưng phần đầu tiên chạy tốt, trong khi phần thứ hai biên dịch nhưng gây ra lỗi thời gian chạy. tại sao vậy?
trong chức năng này
void init_lista (danh sách elemPtr) {
danh sách = KHÔNG;
}
danh sách
là biến cục bộ của hàm. Bạn có thể tưởng tượng nó như thế này
void init_lista () {
danh sách elemPtr = NULL;
}
Tức là biến sẽ bị hủy sau khi thoát khỏi hàm. Tham số ban đầu không thay đổi vì nó được truyền vào hàm theo giá trị. Vì vậy, hàm này xử lý một bản sao của đối tượng ban đầu.
trong chức năng này
void init_lista (elemPtr *list) {
*danh sách = NULL;
}
Một con trỏ tới đối tượng ban đầu được truyền. Do đó, việc thay đổi tham số thông qua con trỏ này sẽ được thực hiện đối với đối tượng ban đầu.
Tôi là một lập trình viên xuất sắc, rất giỏi!