Sunday, July 19, 2020

Con trỏ và mảng | Mối quan hệ giữa Mảng và Con trỏ

Trong hướng dẫn này, bạn sẽ tìm hiểu về mối quan hệ giữa mảng và con trỏ trong lập trình C. Bạn cũng sẽ học cách truy cập các phần tử mảng bằng cách sử dụng con trỏ.
Trước khi bạn tìm hiểu về mối quan hệ giữa mảng và con trỏ, hãy nhớ xem lại 2 vấn đề sau:
  1. Mảng trong C
  2. Con trỏ trong C

Mối quan hệ giữa Mảng và Con trỏ

Một mảng là một khối dữ liệu tuần tự. Hãy viết một chương trình để in địa chỉ của các phần tử mảng.
#include <stdio.h>
int main() {
   int x[4];
   int i;
   for(i = 0; i < 4; ++i) {
      printf("&x[%d] = %p\n", i, &x[i]);
   }
   printf("Address of array x: %p", x);
   return 0;
}
Kết quả:
&x[0] = 1450734448
&x[1] = 1450734452
&x[2] = 1450734456
&x[3] = 1450734460
Address of array x: 1450734448
Có sự khác biệt 4 byte giữa hai phần tử liên tiếp của mảng x. Đó là bởi vì kích thước của int là 4 byte (trên trình biên dịch của chúng tôi).
Mối quan hệ giữa Mảng và Con trỏ

Lưu ý rằng, địa chỉ của & x [0] và x là như nhau. Đó là vì tên biến x trỏ đến phần tử đầu tiên của mảng.
Ví dụ 1: Con trỏ và mảng
#include <stdio.h>
int main() {
  int i, x[6], sum = 0;
  printf("Enter 6 numbers: ");
  for(i = 0; i < 6; ++i) {
      scanf("%d", x+i);
      sum += *(x+i);
  }
  printf("Sum = %d", sum);
  return 0;
}
kết quả:
Enter 6 numbers:  2
 3
 4
 4
 12
 4
Sum = 29 
Ví dụ 2: Mảng và con trỏ
#include <stdio.h>
int main() {
  int x[5] = {1, 2, 3, 4, 5};
  int* ptr;
  // ptr is assigned the address of the third element
  ptr = &x[2];
  printf("*ptr = %d \n", *ptr);   // 3
  printf("*(ptr+1) = %d \n", *(ptr+1)); // 4
  printf("*(ptr-1) = %d", *(ptr-1));  // 2
  return 0;
}
Kết quả:
*ptr = 3
*(ptr+1) = 4
*(ptr-1) = 2

No comments:

Post a Comment