tôi đang học làm thế nào để tạo ra các mảng 1D động trong C. Đoạn code dưới đây cố gắng làm điều này:Mảng động trong C - Sự hiểu biết của tôi về malloc/realloc có đúng không?
- Tạo một mảng động có độ dài 10, giữ đôi, sử dụng malloc.
- Đặt từng mục nhập của mảng thành
j/100
cho j = 0,1, ..., 9. Sau đó in . - Thêm mục nhập bổ sung vào cuối mảng bằng cách sử dụng realloc.
- Đặt mục nhập mới là
j/100
và in lại từng mục nhập một lần nữa.
thử nghiệm
double* data = (double*)malloc(10*sizeof(double));
for (j=0;j<10;j++)
{
data[j]= ((double)j)/100;
printf("%g, ",data[j]);
}
printf("\n");
data = (double*)realloc(data,11*sizeof(double));
for (j=0;j<11;j++)
{
if (j == 10){ data[j]= ((double)j)/100; }
printf("%g, ",data[j]);
}
free((void*) data);
Câu hỏi
1) Tôi có mã hóa này phải không?
2) Hướng dẫn tôi tìm thấy sử dụng malloc
mà không đặt (double*)
ở phía trước. Ví dụ.
int *pointer;
pointer = malloc(2*sizeof(int));
Điều này không biên dịch cho tôi trên Visual Studio 2010, Windows 7. Lỗi "giá trị của loại void không thể gán cho thực thể loại int".
Tại sao nó hoạt động cho những hướng dẫn đó chứ không phải cho tôi? Tôi có đúng để đoán rằng đó là bởi vì các trình biên dịch mà họ đang sử dụng tự động điền vào các (int*)
cho họ trong ví dụ của tôi?
"giá trị của loại void không thể được gán cho thực thể của loại int" không phải là lỗi mà trình biên dịch * C * sẽ tạo ra. Vấn đề là bạn đang sử dụng trình biên dịch * C++ *. Đảm bảo rằng tệp nguồn của bạn có tên là ' .c'. –