Sự khác biệt giữa int * a; và int ** a; trong C?


Câu trả lời 1:

Giả sử chúng ta lấy

int i;

int * a;

int ** b;

Bây giờ a là một con trỏ lưu địa chỉ của i, nó được gọi là con trỏ khi nó trỏ một địa chỉ thuộc loại một.

int * a có thể lưu địa chỉ của i vì đó là biến số nguyên.

Bây giờ hãy xem int ** b nó là một con trỏ tới một con trỏ mà bạn có thể xem nó như int * (* b) có nghĩa là nó là một con trỏ sẽ trỏ đến một con trỏ khác có kiểu số nguyên.

Có nghĩa là b sẽ lưu địa chỉ của a.

Vì vậy, chúng ta có thể gán giá trị cho ba biến là:

i = 5;

a = & i;

b = & a;

Quan trọng:

nếu bạn sẽ in i: 5 (giá trị) sẽ được in.

nếu bạn sẽ in: địa chỉ của tôi sẽ được in.

nếu bạn sẽ in * a: 5 (giá trị) sẽ được in.

nếu bạn sẽ in b: Địa chỉ của a sẽ được in

nếu bạn sẽ in * b: địa chỉ của tôi sẽ được in

nếu bạn sẽ in ** b: 5 (giá trị) sẽ được in.


Câu trả lời 2:

Xin chào, tham khảo sơ đồ và mã dưới đây, bạn sẽ nhận được câu trả lời của bạn. Trên thực tế, đó là khái niệm con trỏ đến con trỏ (con trỏ kép)

Địa chỉ của num num có: 1000

Địa chỉ của con trỏ ptr1 là: 2000

Địa chỉ của con trỏ ptr2 là: 3000

// sức mạnh của chúng tôi và mã nguồn

#inc loại

int chính ()

{

int num = 10;

int * ptr1;

int ** ptr2;

ptr1 = & num;

ptr2 = & ptr1;

printf ("Giá trị của num =% d \ n", num);

printf ("Giá trị khả dụng tại * ptr1 =% d \ n", * ptr1);

printf ("Giá trị khả dụng tại ** ptr2 =% d \ n", ** ptr2);

}

Đầu ra:

Giá trị num = 10

Giá trị khả dụng tại * ptr1 = 10

Giá trị khả dụng tại ** ptr2 = 10