Bước tới nội dung

Bảng tra cứu thuật ngữ ngôn ngữ lập trình C/Biến số

Tủ sách mở Wikibooks

Truyền các biến

[sửa]

Các biến trong C được truyền qua các hàm bằng giá trị trong khi nhiều ngôn ngữ khác lại được truyền bằng tham chiếu (hay bằng địa chỉ). Điều này có nghĩa là hàm chỉ chép lại các giá trị và không thể thay đổi các giá trị đó của các biến (hay đối số) đưa vào. Để có thể thay đổi được giá trị của các biến truyền vào, người lập trình có thể truyền địa chỉ của nó vào hàm và tham chiếu ngược nó trong hàm được dùng (xem thêm kiểu tham chiếu)

  void incInt(int *y)
  {
     (*y)++;  // tăng giá trị của x trong <code>main<code> 1 đơn vị
  }
 
  void main(void)
  {
     int x = 0;
     incInt(&x);  // chuyển một tham chiếu vào incInt cho 'x'
  }

Để có thể chuyển một con trỏ (mà có thể cần đổi địa chỉ nó chỉ đến), có thể chuyển một tham chiếu cho con trỏ (tham chiếu này chỉ đến điạ chỉ của con trỏ):

  void setInt(int **p, int n)
  {
     *p = (int *) malloc(sizeof(int));  // đăng kí một vùng nhớ
     *p = n;                              // cài giá trị vào
  }
 
  void main(void)
  {
     int *p;           //khai báo một con trỏ kiểu integer
     setInt(&p, 42); // chuyển giá trị của 'p' vào.
  }

int **p sẽ định nghĩa một con trỏ chỉ đến con trỏ (thay vì chỉ đến các kiểu dữ liệu thông thường) tức là chỉ đến địa chỉ của con trỏ p.

Hàm scanf làm việc theo cùng một cách thức:

  int x;
  scanf("%d", &x);