C Pass Địa chỉ và Con trỏ

Trong hướng dẫn này, bạn sẽ học cách chuyển địa chỉ và con trỏ làm đối số cho các hàm với sự trợ giúp của các ví dụ.

Trong lập trình C, cũng có thể truyền địa chỉ làm đối số cho các hàm.

Để chấp nhận các địa chỉ này trong định nghĩa hàm, chúng ta có thể sử dụng con trỏ. Đó là bởi vì con trỏ được sử dụng để lưu trữ địa chỉ. Hãy lấy một ví dụ:


Ví dụ: Chuyển địa chỉ đến hàm

#include <stdio.h>
void swap(int *n1, int *n2);

int main()
{
    int num1 = 5, num2 = 10;

    // address of num1 and num2 is passed
    swap( &num1, &num2);

    printf("num1 = %d\n", num1);
    printf("num2 = %d", num2);
    return 0;
}

void swap(int* n1, int* n2)
{
    int temp;
    temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

Khi bạn chạy chương trình, kết quả đầu ra sẽ là:

num1 = 10
num2 = 5

Địa chỉ của num1 và num2 được chuyển đến swap()hàm bằng cách sử dụng swap(&num1, &num2);.

Các con trỏ n1 và n2 chấp nhận các đối số này trong định nghĩa hàm.

void swap(int* n1, int* n2) {
    ... ..
}

Khi * n1 và * n2 được thay đổi bên trong swap()hàm, num1 và num2 bên trong hàm main () cũng bị thay đổi.

Bên trong swap()chức năng, *n1và *n2hoán đổi. Do đó, num1 và num2 cũng được hoán đổi.

Lưu ý rằng swap()không trả lại bất cứ điều gì; kiểu trả về của nó là void.

Ví dụ 2: Chuyển con trỏ đến hàm

#include <stdio.h>

void addOne(int* ptr) {
  (*ptr)++; // adding 1 to *ptr
}

int main()
{
  int* p, i = 10;
  p = &i;
  addOne(p);

  printf("%d", *p); // 11
  return 0;
}

Ở đây, giá trị được lưu trữ tại p , *p, 10 ban đầu.

Sau đó, chúng tôi chuyển con trỏ p tới addOne()hàm. Con trỏ ptr lấy địa chỉ này trong addOne()hàm.

Bên trong hàm, chúng tôi đã tăng giá trị được lưu trữ tại ptr lên 1 bằng cách sử dụng (*ptr)++;. Vì con trỏ ptr và p đều có cùng địa chỉ nên *pbên trong main()cũng là 11.









Gõ tìm kiếm nhanh...