int *P[5]
và 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.
Phân biệt 2 loại Pointer trong C
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 ý:
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-ptr10 và https://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.
-
int *P[5]
viết lạiint* p[5]
khai báo mảng kiểu con trỏint
có 5 phần tử. p là 1 con trỏ kiểuint**
trỏ đến 1 phần tử kiểuint*
. Phép toánp + 1
trả về 1 con trỏint**
trỏ đến vị trí cáchp sizeof(int*)
-
int (*Q)[5]
khai báo 1 con trỏ trỏ đến biến có kiểu dữ liệuint [5]
. Phép toánq + 1
trả về 1 con trỏ trỏ đến biến có kiểu dữ liệuint [5]
cách ```q sizeof(int [5]).
P/S Đang code để kiểm tra.
Ra error
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