Con trỏ và mảng con trỏ

Bạn em có code một đoạn như này

int* getPointerToArray(int n){
    int a,*b,x[n];
    b=(int*)calloc(n,sizeof(int));
    for(a=0;a<n;a++){
        scanf("%d",&(x[a]));
        b[a]=x[a];
    }
    
    return b;
}

Cho em hỏi là cái đoạn b[a]=x[a]; là như thế nào ạ. Vì b là biến con trỏ còn x là biến int thì làm sao bằng nhau được ạ

x là mảng chứ :smiley: nói cách khác, x có kiểu int[n].

1 Like

Dòng này ý là tạo mảng động bản sao của mảng x ban đầu.
b là biến con trỏ nhưng phép gán b ở hàm calloc lại biến b thành 1 mảng nhé :slight_smile:

hi e

giả sử kích thước của 1 int là 4 byte.

khi e khai báo, int x[3],
e sẽ được cấp 3 ô nhớ, mỗi ô nhớ có kích thước 4 byte, ví dụ địa chỉ của các ô nhớ lần lượt là: 20, 24, 28

khi e gọi, b=(int*)calloc(3, sizeof(int)
e cũng sẽ được cấp 3 ô nhớ, mỗi ô nhớ có kích thước 4 byte, giả sử địa chỉ của các ô nhớ là: 100, 104, 108

operator “[]”, là một phương tiện để e có thể truy cập tới 1 ô nhớ nào đó, và opeartor này cho phép gọi trên một mảng hoặc 1 con trỏ.

khi e gọi x[0], có nghĩa là e đang truy cập tới ô 20
tương tự,
x[1] --> ô 24
x[2] --> ô 28

khi e gọi b[0], có nghĩa là e đang truy cập tới ô 100
tương tự,
b[1] --> ô 104
b[2] --> ô 108

và nếu e gọi: b[0] = x[0], có nghĩa là copy giá trị của ô 20, rồi paste qua ô 100.

1 Like

b là biến con trỏ kiểu int , x là biến mảng kiểu int

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?