Phân biệt 2 loại Pointer trong C

int *P[5]int (*Q)[5] khác nhau như nào vậy ? Mình đọc trên congdongcviet mà không rõ, ai biết chỉ dùm với.
Theo mình nghĩ thì :
int (*Q)[5] là 1 mảng gồm 5 con trỏ kiểu int.

Cái đầu tiên ta viết lại là int* P[5] => P là một mảng gồm 5 phần tử có kiểu dữ liệu là int*
Cái thứ hai ta viết lại là int (*Q)[5] => *Q là một mảng gồm 5 phần tử có kiểu dữ liệu là int
Mình không học C nên không biết nó viết như thế nào, trong C++ thường người ta sẽ viết là int* Q = new int[10];

int *Q = new int[10] equal với int (*Q)[10] à b ?
int *Q = new int[10]; cấp phát cho con trỏ Q vùng nhớ có thể chứa 5 phần tử int.
*(Q+i) = giá trị Decimal;
cái còn lại mình thấy k đúng.

Bạn viết code có format nhé, không là các ký tự đặc biệt bị ẩn hết đi đấy. Dùng cái dấu bên cạnh số 1 ý:

1 Like

ok rồi, b giải thích tiếp cho mình đi.

Mình chưa thực hành thử, tại vừa mới search google thấy có 2 kết quả được đánh tick trên StackOverFlow cùng một câu trả lời: https://stackoverflow.com/questions/13910749/difference-between-ptr10-and-ptr10https://stackoverflow.com/questions/21972794/what-the-difference-between-int-v10-and-int-p10

Nếu theo cách giải thích thì: int (*Q)[5] là con trỏ Q trỏ tới 1 mảng int[5]
thì cũng sẽ giống như có 1 mảng int a[5]; rồi cho 1 con trỏ trỏ tới mảng a này
int *K = a;
nhưng *(K+i) = giá trị của phần tử mảng còn *(Q+i) thì ra cái quái gì

Hi Nguyen Trong Dung.

  1. int *P[5] viết lại int* p[5] khai báo mảng kiểu con trỏ int có 5 phần tử. p là 1 con trỏ kiểu int** trỏ đến 1 phần tử kiểu int*. Phép toán p + 1 trả về 1 con trỏ int** trỏ đến vị trí cách p sizeof(int*)

  2. int (*Q)[5] khai báo 1 con trỏ trỏ đến biến có kiểu dữ liệu int [5]. Phép toán q + 1 trả về 1 con trỏ trỏ đến biến có kiểu dữ liệu int [5] cách ```q sizeof(int [5]).

P/S Đang code để kiểm tra.

Ra error :smiley:
int* P[5] là mảng 5 con trỏ, còn int (*Q)[5] là con trỏ trỏ đến mảng 5 int.

Câu này có thể trả lời với toán tử typeid() của C++11 hoặc extension với C (gcc).

Cái này liên quan đến ưu tiên toán tử. Có thể xem ở đây

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