<< Chapter < Page Chapter >> Page >

Chúng ta nhận thấy rằng, cách viết của C++ sáng sủa và dễ sử dụng hơn nhiều. Toán tử new thay thế cho hàm malloc() hay calloc() của C có cú pháp như sau :

new type_name

new ( type_name )

new type_name initializer

new ( type_name ) initializer

Trong đó :

type_name: Mô tả kiểu dữ liệu được cấp phát. Nếu kiểu dữ liệu mô tả phức tạp, nó có thể được đặt bên trong các dấu ngoặc.

initializer: Giá trị khởi động của vùng nhớ được cấp phát.

Nếu toán tử new cấp phát không thành công thì nó sẽ trả về giá trị NULL.

Còn toán tử delete thay thế hàm free() của C, nó có cú pháp như sau :

delete pointer

delete [] pointer

Chúng ta có thể vừa cấp phát vừa khởi động như sau :

int *P;

P = new int(100);

if (P!=NULL)

{

cout<<*P<<"\n";

delete P;

}

else

cout<<"Khong con du bo nho de cap phat\n";

Để cấp phát một mảng, chúng ta làm như sau :

int *P;

P = new int[10]; //Cấp phát mảng 10 số nguyên

if (P!=NULL)

{

for(int I = 0;I<10;++)

P[I]= I;

for(I = 0;I<10;++)

cout<<P[I]<<"\n";

delete []P;

}else cout<<"Khong con du bo nho de cap phat\n";

Chú ý: Đối với việc cấp phát mảng chúng ta không thể vừa cấp phát vừa khởi động giá trị cho chúng, chẳng hạn đoạn chương trình sau là sai :

int *P;

P = new (int[10])(3); //Sai !!!

Ví dụ 2.6: Chương trình tạo một mảng động, khởi động mảng này với các giá trị ngẫu nhiên và sắp xếp chúng.

1: #include<iostream.h>

2: #include<time.h>

3: #include<stdlib.h>

4: int main()

5: {

6:    int N;

7:    cout<<"Nhap vao so phan tu cua mang:";

8:    cin>>N;

9:    int *P=new int[N];

10:    if (P==NULL)

11:    {

12:       cout<<"Khong con bo nho de cap phat\n";

13:       return 1;

14:    }

15:    srand((unsigned)time(NULL));

16:    for(int I=0;I<N;++I)

17:      P[I]=rand()%100; //Tạo các số ngẫu nhiên từ 0 đến 99

18:    cout<<"Mang truoc khi sap xep\n";

19:    for(I=0;I<N;++I)

20:       cout<<P[I]<<" ";

21:    for(I=0;I<N-1;++I)

22:       for(int J=I+1;J<N;++J)

23:          if (P[I]>P[J])

24:          {

25:             int Temp=P[I];

26:             P[I]=P[J];

27:             P[J]=Temp;

28:          }

29:    cout<<"\nMang sau khi sap xep\n";

30:    for(I=0;I<N;++I)

31:       cout<<P[I]<<" ";

32:    delete []P;

33:    return 0;

34:  }

Chúng ta chạy ví dụ 2.6 , kết quả ở hình 2.7

Hình 2.7: Kết quả của ví dụ 2.6

Ví dụ 2.7: Chương trình cộng hai ma trận trong đó mỗi ma trận được cấp phát động.

Chúng ta có thể xem mảng hai chiều như mảng một chiều như hình 2.8

Hình 2.8: Mảng hai chiều có thể xem như mảng một chiều.

Gọi X là mảng hai chiều có kích thước m dòng và n cột.

A là mảng một chiều tương ứng.

Nếu X[i][j]chính là A[k] thì k = i*n + j

Chúng ta có chương trình như sau :

1: #include<iostream.h>

2: #include<conio.h>

3: //prototype

4: void AddMatrix(int * A,int *B,int*C,int M,int N);

5: int AllocMatrix(int **A,int M,int N);

6: void FreeMatrix(int *A);

7: void InputMatrix(int *A,int M,int N,char Symbol);

8: void DisplayMatrix(int *A,int M,int N);

9:

10: int main()

11: {

12:     int M,N;

13:     int *A = NULL,*B = NULL,*C = NULL;

14:

15:     clrscr();

16:     cout<<"Nhap so dong cua ma tran:";

17:     cin>>M;

18:     cout<<"Nhap so cot cua ma tran:";

19:     cin>>N;

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Co nuoi. OpenStax CNX. Jul 29, 2009 Download for free at http://cnx.org/content/col10760/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Co nuoi' conversation and receive update notifications?

Ask