0965303260
TP. Hồ Chí Minh

[C]. Con Trỏ Và Mảng 1 Chiều

Trong bài viết này bạn sẽ biết tìm hiểu mối quan hệ giữa mảng 1 chiều và con trỏ

NỘI DUNG : 

  • Con Trỏ Và Mảng
  • Video Tutorial

point vs array

1. Con Trỏ Và Mảng

Giá trị của mảng chính là địa chỉ phần tử đầu tiên trong mảng, ví dụ mảng A[] = {3, 8, 4, 2, 9} thì A[] có giá trị là địa chỉ của A[0]

Tên mảng chính là một hằng con trỏ và bạn không thể thay đổi được

Mảng 1 chiều A[] thì con trỏ trỏ tới phần tử A[i] là A + i, vậy (A + i) tương đương với &A[i] hay địa chỉ của A[i] và *(A + i) tương đương với A[i] 

con trỏ và mảng

Ví dụ 1 : Sử dụng mảng thông qua con trỏ

#include "stdio.h"
#include "stdlib.h"

int main(){
    int n = 5;
    int a[5] = {3, 8, 4, 2, 9};
    printf("Gia tri cua a : %d\n", a);
    for(int i = 0; i < n; i++){
        printf("Dia chi cua a[%d] : %d\n", i, a + i); // a + i <=> &a[i]
    } 
    printf("Mang a : ");
    for(int i = 0; i < n; i++){
        printf("%d ", *(a + i));
    }
    return 0;
}

Output : 

Gia tri cua a : 6487520
Dia chi cua a[0] : 6487520
Dia chi cua a[1] : 6487524
Dia chi cua a[2] : 6487528
Dia chi cua a[3] : 6487532
Dia chi cua a[4] : 6487536
Mang a : 3 8 4 2 9 

Trong mảng 1 chiều thì bạn có thể sử dụng một con trỏ để trỏ tới các phần tử trong mảng và sử dụng các toán tử ++, -- hoặc +, - để di chuyển con trỏ qua lại các ô nhớ trong mảng

Lưu ý giúp mình rằng bạn có thể sử dụng một con trỏ khác để di chuyển qua lại trong mảng nhưng không thể di chuyển hằng con trỏ mảng.

Ví dụ 2 : 

#include "stdio.h"
#include "stdlib.h"

int main(){
    int n = 5;
    int a[5] = {3, 8, 4, 2, 9};
    int *ptr = &a[0];
    for(int i = 0; i < n; i++){
        printf("%d ", *(ptr + i));
    }
    printf("\n");
    ++ptr; // => a[1]
    printf("%d\n", *ptr); 
    ptr+= 2; // a[3]
    printf("%d\n", *ptr);
    --ptr; // a[2]
    printf("%d\n", *ptr);
    return 0;
}

Output : 

3 8 4 2 9 
8
2
4

Ví dụ 3 :

#include "stdio.h"
#include "stdlib.h"

int main(){
    int n = 10;
    int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int *ptr = &a[3];
    ptr += a[2]; // ptr += 3 => a[6]
    printf("%d %d %d\n", ptr, &a[6], *ptr);
    --ptr; // a[5]
    printf("%d %d %d\n", ptr, &a[5], *ptr);
    return 0;
}

Output : 

6487560 6487560 7
6487556 6487556 6


Xem thêm bài giảng về Con Trỏ của mình : 

9kaUEMbXEk4