01/10/2018, 09:58

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.

Trần Hoàn viết 12:05 ngày 01/10/2018

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];

Nguyen Trong Dung viết 12:05 ngày 01/10/2018

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.

Trần Hoàn viết 12:10 ngày 01/10/2018

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 ý:

Nguyen Trong Dung viết 12:07 ngày 01/10/2018

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

Trần Hoàn viết 12:11 ngày 01/10/2018

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

Nguyen Trong Dung viết 12:04 ngày 01/10/2018

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ì

Tao Không Ngu. viết 12:01 ngày 01/10/2018

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.

rogp10 viết 12:04 ngày 01/10/2018

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).

viết 12:01 ngày 01/10/2018

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

VietHQ – 5 Sep 16

Ưu tiên toán tử · VietHQ

Hôm nay mình sẽ nói về một số cái hay nhầm lẫn khi lập trình, tập trung vào những vấn đề như trên tựa đã ghi smiley (làm cái tựa for fun tý) mọi người thấy mọi

Bài liên quan
0