Chủ Nhật, 3 tháng 1, 2016

Các chương trình viết bằng C/C++ chuẩn có thể xin cấp phát bộ nhớ từ hệ điều hành, địa chỉ đầu của vùng nhớ được cấp phát sẽ được trả về thông qua biến con trỏ. Sau khi vùng nhớ sử dụng xong, người lập trình cần phải giải phóng vùng nhớ, để trả về bộ nhớ cho hệ thống.

void main()
{
int n; float *a = NULL; // Khai báo con trỏ a kiểu float*
printf("\nEnter array size: ");
scanf("%d", &n);
if(n < 1)
{
printf("\nInvalid size!"); return;
}
a = (float*)malloc(n * sizeof(float)); // gán đến địa chỉ vùng nhớ xin được cấp phát
if(a == NULL)
{
printf("Memory error!"); return;
}
for(int i = 0; i < n; i++)
{
printf("a[%d] = ", i);
scanf("%f", &a[i]);
}
printf("\nData: ");
for(int i = 0; i < n; i++)
{
printf("%f", a[i]);
// do something here
// Finally freeing memory
}
free(a);
getch();
}

void main()
{
int n; float *a = NULL; // Khai báo con trỏ a kiểu float*
cout << "Enter array size: ";
cin >> n;
if(n < 1)
{
cout << "Invalid size!"; return;
}
a = new float[n]; // gán đến địa chỉ vùng nhớ xin được cấp phát
if(a == NULL)
{
cout << "Memory Error!"; return;
}
for(int i = 0; i < n; i++)
{
cout << "a[" << i << "] = ";
cin >> a[i];
}
cout << "Data: ";
for(int i = 0; i < n; i++)
{
cout << a[i] << " ";
// do something here
// Finally freeing memory
}
delete[]a;
getch();
}
Mã nguồn minh họa việc gán con trỏ bằng 1 vùng nhớ được cấp phát, được viết bằng ngôn ngữ C và C++. Chương trình này chỉ làm 1 việc đơn giản là xin cấp phát 1 mảng n số thực kiểu float, nhập n số thực, xuất ra màn hình và sau cùng giải phóng bộ nhớ. Biến con trỏ a kiểu float* được khai báo, sau đó gán đến địa chỉ vùng nhớ xin được cấp phát. Đối với C++, việc gọi new float[n] nghĩa là xin 1 vùng nhớ liên tục chứa được n số float, thực chất thì vùng nhớ này gồm 4n byte bởi vì mỗi số float có kích thước là 4 byte theo chuẩn IEEE. Đối với C, bởi vì hàm malloc() cần nhận vào 1 tham số quy định số byte được cấp phát và trả về con trỏ kiểu void* nên việc gọi hàm cấp phát có phức tạp hơn. Chỉ thị (float*)malloc(n*sizeof(float)) có nghĩa là xin 1 vùng nhớ có kích thước là n*sizeof(float) = 4n byte, bởi vì địa chỉ vùng nhớ trả về kiểu void* nên phải ép kiểu sang float* mới có thể gán được vào biến con trỏ a có kiểu là float*.

Related Posts:

  • Java Collections FrameworkTrước Java 2, Java cung cấp các lớp học đặc biệt như từ điển, Vector, Stack, và Properties để lưu trữ và xử nhóm đối tượng. Mặc dù các lớp này là khá hữu ích, họ thiếu một, chủ đề thống nhất trung ương. Vì vậy, cách mà bạn sử… Read More
  • Bài 3. Sự khác nhau giữa kiểu dữ liệu cơ sở và kiểu dữ liệu tham chiếu trong ngôn ngữ Java là gì?Xin chào tất cả các bạn!Biến (variable) là một khái niệm cực kỳ quen thuộc với một developer, và đi kèm với nó chính là các kiểu dữ liệu. Ở bài trước, tớ đã cho các bạn thấy cách phân loại các kiểu dữ liệu trong Java. Và… Read More
  • Đa luồng trong JavaJava là một ngôn ngữ lập trình đa luồng có nghĩa là chúng ta có thể phát triển các chương trình đa luồng sử dụng Java. Một chương trình đa luồng chứa hai hoặc nhiều bộ phận có thể chạy đồng thời và mỗi một phần có thể xử lý c… Read More
  • Cấu trúc dữ liệu trong javaCác cấu trúc dữ liệu được cung cấp bởi các gói tiện ích Java là rất mạnh mẽ và thực hiện một loạt các chức năng. Những cấu trúc dữ liệu bao gồm các interface và classes và sau:EnumerationBitSetVectorStackDictionaryHashta… Read More
  • Generics trong javaNó sẽ được tốt đẹp nếu chúng ta có thể viết một cách sắp xếp duy nhất mà có thể sắp xếp các phần tử trong một mảng Integer, một mảng String hoặc một mảng của bất kỳ loại hỗ trợ đặt hàng.Phương pháp Java Generic và các lớp học… Read More

0 nhận xét:

Đăng nhận xét

Categories

Sample Text

Được tạo bởi Blogger.

Must Read

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Popular Posts

Video

Popular Posts

Our Facebook Page