Mối quan hệ giữa Array và Pointer trong C

Mối quan hệ giữa Array và Pointer

Array là một block của dữ liệu dạng chuỗi. Chúng ta hãy cùng viết một chương trình hiển thị địa chỉ address của các phần tử trong array.

#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

Chúng ta thấy rằng địa chỉ của 4 phần tử trong array x khác nhau, nhưng địa chỉ của phần tử đầu tiên &x[0] và địa chỉ của x lại giống nhau. Đó là bởi vì biến x đã trỏ về giá trị đầu tiên trong array.
array pointer

Từ ví dụ trên ta thấy rằng

&x[0] == x
x[0] == *x

Và tương tự

&x[1] == x+1
x[1] == *(x+1)
&x[2] == x+2
x[2] == *(x+2)

Ta có thể kết luận rằng &x[i] tương đương với x+i, và x[i] tương đương với *(x+i)


Ví dụ 1

#include <stdio.h>
int main() {
  int i, x[6], sum = 0;
  printf("Nhập 6 số: ");
  for(i = 0; i < 6; ++i) {
  // tương đương với scanf("%d", &x[i]);
      scanf("%d", x+i);

  // tương đương với sum += x[i]
      sum += *(x+i);
  }
  printf("Sum = %d", sum);
  return 0;
}

Kết quả

Nhập 6 số:  2
 3
 4
 4
 12
 4
Sum = 29 

Ví dụ 2

#include <stdio.h>
int main() {
  int x[5] = {1, 2, 3, 4, 5};
  int* ptr;

  // ptr được gán địa chỉ của phần tử thứ 3
  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
Series Navigation<< Pointer trong CPointer và hàm trong C >>

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *