Trong khai báo biến con trỏ dùng malloc; ta thấy có thể viết như sau:
int *p = (int *) malloc (n*sizeof(int *));
(với n là cỡ mảng đã được hỏi & scanf ở bên trên - chắc không cần viết ra)
vấn đề ở: sizeof(int *): chương trình vẫn chạy được, câu hỏi là * thêm vào để làm gì? (dấu * đó thấy ở dòng đầu tiên trang 173 sách C Aptech)
(nhiều người khuyên nên đọc sách Eng nhưng hiện tại trình C & Eng còn thấp nên trước mắt đọc sách Vie trước :D)
Cảm ơn anh/chị đã xem & trả lời.
Dấu * trong dòng lệnh khai báo biến con trỏ dùng cấp phát động
Có phải bạn định viết là int* p = (int*) malloc(n * sizeof(int*)) ?
Dấu * đó là sách sai rồi
không có đâu.
Để hiện code chính xác thì bạn bôi đen rồi bấm vào nút </>.
nhưng vẫn chạy được
đã thử ở BorlandC++5.02 mà 
Do kích thước con trỏ thường cố định (và bằng với của int) thôi. Nếu không phải là int mà là struct nào đó thì sẽ tràn mem và văng lỗi.
Đối số duy nhất là số byte = số phần tử * kích thước (số byte trên) mỗi phần tử.
Tiện đây bác nói thêm về đoạn “kích thước con trỏ thường cố định (và bằng với của int)” được không? Cảm ơn bác nhiều.
Con trỏ là một kiểu dữ liệu.
Chú ý kiểu dữ liệu int* khác với kiểu dữ liệu int
Bạn khai báo biến p như thế này: int* p = (int*) malloc(n * sizeof(int*)) về lý thuyết là sai. Câu lệnh trên có thể diễn giải như sau: "Khai báo biến p có kiểu dữ liệu int*, khởi tạo biến đó dưới dạng một biến kiểu int* được cấp phát n vùng nhớ liền nhau, mỗi vùng nhớ có kích thước của một biến int*"
May mắn cho bạn, vì biến int* và int đều chiếm 4 bytes bộ nhớ trong (cứ cho là như thế đi) nên bạn xin một vùng nhớ có kích thước n * sizeof(int) hay n * sizeof(int*) cũng như nhau. Tuy nhiên tình hình có thể khác nếu bạn xin cấp phát vùng nhớ cho kiểu double* hay các kiểu dữ liệu khác. Vì mọi con trỏ đều có kích thước 4 bytes (cứ cho là thế) còn các vùng nhớ dữ liệu mà con trỏ trỏ đến có thể khác nhau.

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