Pass by pointer là gì?

Phrase Programming
passing by pointer call by pointer
Truyền theo con trỏ

Trong lập trình (programming), truyền theo con trỏ (pass by pointer) nghĩa là truyền một đối số (argument) con trỏ (pointer) vào tham số hình thức (formal parameter) của hàm (function). Bên trong hàm, có thể sửa đổi giá trị của biến mà đối số con trỏ trỏ đến.

Ví dụ sau đây minh họa truyền theo con trỏ (pass by pointer):


#include <stdio.h>

void swapnum(int *i, int *j) {
  int temp = *i;
  *i = *j;
  *j = temp;
}

int main(void) {
  int a = 10;
  int b = 20;

  swapnum(&a, &b);
  printf("A is %d and B is %d\n", a, b);
  return 0;
}

Khi hàm swapnum() được gọi (call), các giá trị của biến a và b sẽ được hoán đổi vì chúng được truyền theo con trỏ. Đầu ra là:


A is 20 and B is 10

Khi bạn sử dụng truyền theo con trỏ (pass by pointer), một bản sao của con trỏ sẽ được truyền đến hàm. Nếu bạn sửa đổi con trỏ bên trong hàm được gọi (called function), bạn chỉ sửa đổi bản sao của con trỏ, nhưng con trỏ gốc vẫn không được sửa đổi và vẫn trỏ đến biến ban đầu.

Sự khác biệt giữa truyền theo con trỏ (pass by pointer) và truyền theo giá trị (pass by value) là các sửa đổi được thực hiện đối với các đối số được truyền vào bởi con trỏ trong hàm được gọi có ảnh hưởng trong hàm gọi (calling function), trong khi các sửa đổi được thực hiện đối với các đối số được chuyển theo giá trị trong hàm được gọi thì không ảnh hưởng đến hàm gọi. Sử dụng truyền theo con trỏ nếu bạn muốn sửa đổi giá trị đối số trong hàm gọi. Nếu không, hãy sử dụng truyền theo giá trị.

Learning English Everyday