Giới thiệu về con trỏ C

Giới thiệu về Con trỏ C

Con trỏ là một trong những phần khó hiểu / khó hiểu nhất củaC, theo ý kiến của tôi. Đặc biệt nếu bạn là người mới học lập trình, nhưng cũng có thể nếu bạn đến từ một ngôn ngữ lập trình cấp cao hơn như Python hoặc JavaScript.

Trong bài đăng này, tôi muốn giới thiệu chúng theo cách đơn giản nhất nhưng không quá tệ có thể.

Con trỏ là địa chỉ của một khối bộ nhớ có chứa một biến.

Khi bạn khai báo một số nguyên như thế này:

int age = 37;

Chúng ta có thể sử dụng&toán tử để nhận giá trị của địa chỉ trong bộ nhớ của một biến:

printf("%p", &age); /* 0x7ffeef7dcb9c */

Tôi đã sử dụng%pđịnh dạng được chỉ định trongprintf()để in giá trị địa chỉ.

Chúng ta có thể gán địa chỉ cho một biến:

int *address = &age;

Sử dụngint *addresstrong phần khai báo, chúng tôi không khai báo một biến số nguyên, mà là mộtcon trỏ đến một số nguyên.

Chúng ta có thể sử dụng toán tử con trỏ*để nhận giá trị của biến mà một địa chỉ đang trỏ đến:

int age = 37;
int *address = &age;
printf("%u", *address); /* 37 */

Lần này chúng ta đang sử dụng lại toán tử con trỏ, nhưng vì lần này nó không phải là một khai báo nên nó có nghĩa là “giá trị của biến mà con trỏ này trỏ đến”.

Trong ví dụ này, chúng tôi khai báo mộtagevà chúng tôi sử dụng một con trỏ để khởi tạo giá trị:

int age;
int *address = &age;
*address = 37;
printf("%u", *address);

Khi làm việc với C, bạn sẽ thấy rằng rất nhiều thứ được xây dựng dựa trên khái niệm đơn giản này, vì vậy hãy đảm bảo rằng bạn đã làm quen với nó một chút, bằng cách tự chạy các ví dụ trên.

Con trỏ là một cơ hội tuyệt vời vì chúng buộc chúng ta phải suy nghĩ về địa chỉ bộ nhớ và cách tổ chức dữ liệu.

Mảnglà một ví dụ. Khi bạn khai báo một mảng:

int prices[3] = { 5, 4, 3 };

Cácpricesbiến thực sự là một con trỏ đến mục đầu tiên của mảng. Bạn có thể nhận được giá trị của mục đầu tiên bằng cách sử dụngprintf()trong trường hợp này:

printf("%u", *prices); /* 5 */

Điều thú vị là chúng ta có thể nhận được mục thứ hai bằng cách thêm 1 vàopricescon trỏ:

printf("%u", *(prices + 1)); /* 4 */

Và tiếp tục như vậy đối với tất cả các giá trị khác.

Chúng ta cũng có thể thực hiện nhiều thao tác xử lý chuỗi đẹp mắt, vì chuỗi là các mảng nằm dưới mui xe.

Chúng tôi cũng có nhiều ứng dụng khác, bao gồm truyền tham chiếu của một đối tượng hoặc một hàm xung quanh, để tránh tốn nhiều tài nguyên hơn để sao chép nó.

Tải xuống miễn phí của tôiSổ tay C


Các hướng dẫn khác về tiếng clang: