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

Ngôn ngữ C: Việc hoán đổi con trỏ khác với việc hoán đổi giá trị được trỏ tới như thế nào?

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

int a=5; b=7;
int *pa=&a, *pb=&b;

Việc trao đổi giá trị của a và b khác với việc trao đổi giá trị của con trỏ như thế nào, tức là. papb (KHÔNG *pa*pb )? Kết quả của hai trường hợp có khác nhau không?

Khi nào chúng ta phải sử dụng trao đổi con trỏ?

Tôi có một ví dụ trong cuốn sách sử dụng con trỏ để trao đổi với một chuỗi các chuỗi, đó là char* []. Việc này được thực hiện như một phần của cơ chế phân loại. Hàm trao đổi là ký tự*[] Thực hiện hoán đổi con trỏ sang biến kiểu lưu trữ chuỗi. Tôi không hiểu tại sao hàm hoán đổi lại có dạng hoán đổi void(char**, char**) .

Tôi không thể tìm thấy bất kỳ lời giải thích nào ở nơi khác, do đó câu hỏi của tôi.

:( trao đổi(int*& a, int*& b)trao đổi(char** a,char** b) Làm thế nào nó so sánh được.

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

Lý do tại sao việc sử dụng con trỏ để hoán đổi giá trị biến được ưa thích là vì nó tránh đượcsao chép số lượng lớn bộ nhớ. Bất kỳ bản sao bộ nhớ nào cũng cần có thời gian, do đó, việc giữ lượng sao chép bộ nhớ ở mức tối thiểu có thể giúp thuật toán chạy nhanh hơn.

Sao chép bộ nhớ trở thành vấn đề như thế nào?

Hãy xem xét mã giả sau đây, mã này thực hiệnTại chỗHoán đổi hai giá trị thuộc bất kỳ loại nào:

tempValue = value1 /* bản sao bộ nhớ đầu tiên */
value1 = value2 /* bản sao bộ nhớ thứ hai */
value2 = giá trị tạm thời; /* bản sao bộ nhớ thứ ba */

Trong câu hỏi ban đầu của bạn, bạn đã hoán đổi hai整数. Giả sử chiều rộng của một số nguyên là 4 byte, mã giả trên sẽ hoán đổi hai số nguyên trong ba thao tác sao chép. Tổng bộ nhớ được sao chép: 12 byte. Nếu chúng ta giả sử rằng một con trỏ cũng rộng 4 byte thì việc trao đổi giá trị con trỏ cũng sẽ yêu cầu sao chép 12 byte bộ nhớ. Trong trường hợp này, lượng bộ nhớ được sao chép để hoán đổi giá trị giống như con trỏ hoán đổi. Trong trường hợp này, một trong hai phương pháp sẽ mang lại hiệu suất như nhau.

Bây giờ hãy xem xét đoạn mã này:

cấu trúc typedef _mystruct
{
char buffer[128]; /* kích thước của cấu trúc tối thiểu là 128 byte */

} CẤU TRÚC MY, *PMYSTRUCT;

Giá trị MYSTRUCT1, value2;

PMYSTRUCT pValue1 = &value1;
PMYSTRUCT pValue2 = &value2;

CẤU TRÚC CỦA TÔI Kích thước tối thiểu là 128 byte. Sử dụng mã giả ở trên để trao đổi giá trị1giá trị2 Giá trị sẽ yêu cầu ba bản sao bộ nhớ 128 byte hoặc tổng cộng 384 byte. Mặt khác, nếu tôi sử dụng hai con trỏ pValue1pValue2 Hoán đổi giá trị, giả sử con trỏ rộng 4 byte thì số byte được sao chép trong quá trình hoán đổi giống như ví dụ về số nguyên ở trên chỉ 12 byte. Điều này rất nhanh và sẽ hoạt động tốt hơn 384 byte không có con trỏ.

đó là lý do tại sao ký tự** Lý do tại sao nó được sử dụng làm tham số của hàm trao đổi chuỗi. Độ dài của chuỗi được hoán đổi là không xác định và vì các giá trị hoán đổi có nghĩa là sao chép bộ nhớ nên các chuỗi dài có thể làm giảm đáng kể hiệu suất. Sử dụng con trỏ có nghĩa là hiệu suất của trao đổi sẽ giữ nguyên bất kể độ dài của chuỗi được hoán đổi.

Về ngôn ngữ C: Hoán đổi con trỏ khác với hoán đổi giá trị được trỏ tới như thế nào?, 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/11287716/

25 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