cuốn sách gpt4 ai đã làm

c - Sự khác biệt giữa việc chuyển &var sang *var và var sang var là gì?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 03:40:52 28 4
mua khóa gpt4 Nike

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ừ&*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?

câu trả lời hay nhất

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.

Về c - sự khác biệt giữa việc chuyển &var sang *var và chuyển var sang var là gì? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/28798322/

28 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress