int (*p)[2];
p=(int(*))malloc(sizeof(int[2])*100);
Cách đúng để tạo con trỏ tới mảng là gì? Tôi không thể tìm ra phần bằng (int (*))con trỏ malloc tới mảng
int (*p)[2];
p=(int(*))malloc(sizeof(int[2])*100);
Cách đúng để tạo con trỏ tới mảng là gì? Tôi không thể tìm ra phần bằng (int (*))con trỏ malloc tới mảng
bình luận Đăng là câu trả lời:
Trong C
bạn không nên bỏ giá trị trả về của malloc
. Vui lòng tham khảo this post trên SO để biết thêm thông tin về lý do tại sao giá trị trả về typecasting của malloc
không phải là ý tưởng hay trong C
. Và nếu vì lý do nào đó mà bạn thực sự muốn truyền, thì phải là (int(*)[2])
. (int(*))
là int *
. Kích thước được truyền cho malloc trông tốt (phân bổ kích thước cho 100 con trỏ tới mảng 2 int). Vì vậy, bạn nên làm
int (*p)[2];
p=malloc(sizeof(int[2])*100);
Hy vọng điều này sẽ hữu ích!
Không rõ bạn muốn gì ở đây. Ví dụ, nếu bạn muốn 100 cặp int, được sắp xếp như một mảng con trỏ tới int (trong đó mỗi con trỏ trỏ tới chính xác hai int), thì bạn cần gọi hàm 100 lần trên 100 con trỏ tới int, phân bổ hai số nguyên mỗi lần.
Nó không phải là 'làm cho tinh thần để "malloc một con trỏ đến một mảng". Bạn có thể malloc một mảng, và gán địa chỉ đó cho một con trỏ, hoặc bạn có thể malloc một mảng con trỏ. Nhưng những gì bạn đã hỏi là không rõ ràng.
ok, nhưng nếu tôi không biết rằng tôi cần 100 con trỏ khi chạy? nếu tôi cần 10000 thì sao? Tôi nghĩ rằng tôi đang làm đúng nó – titus
Tôi nghĩ rằng nó khá rõ ràng những gì OP cần ở đây. –
Trong C '(int (*))' nên tránh. Bạn nên bỏ giá trị trả về của 'malloc'. –
oh wow không có lỗi biên dịch nhiều hơn, cảm ơn bạn – titus
Và nếu bạn thực sự thực sự muốn đúc, nó phải là '(int (*) [2])'. '(int (*))' là 'int *'. Kích thước được chuyển đến 'malloc' trông tốt (phân bổ kích thước cho 100 con trỏ tới mảng 2 int) –