Computer >> Máy Tính >  >> Lập trình >> C ++

Tại sao C ++ yêu cầu ép kiểu cho malloc () nhưng C thì không?

Trong ngôn ngữ C, các con trỏ void được chuyển đổi hoàn toàn thành kiểu con trỏ đối tượng. Hàm malloc () trả về void * trong tiêu chuẩn C89. Trong các phiên bản trước của C, malloc () trả về char *. Trong ngôn ngữ C ++, mặc định hàm malloc () trả về giá trị int. Vì vậy, các con trỏ được chuyển đổi thành con trỏ đối tượng bằng cách sử dụng ép kiểu rõ ràng.

Sau đây là cú pháp cấp phát bộ nhớ trong ngôn ngữ C.

pointer_name = malloc(size);

Đây,

pointer_name - Bất kỳ tên nào được đặt cho con trỏ.

kích thước - Kích thước của bộ nhớ được cấp phát tính bằng byte.

Sau đây là một ví dụ về malloc () trong ngôn ngữ C.

Ví dụ

#include <stdio.h>
#include <stdlib.h>
int main() {
   int n = 4, i, *p, s = 0;
   p = malloc(n * sizeof(int));
   if(p == NULL) {
      printf("\nError! memory not allocated.");
      exit(0);
   }
   printf("\nEnter elements of array : ");
   for(i = 0; i < n; ++i) {
      scanf("%d", p + i);
      s += *(p + i);
   }
   printf("\nSum : %d", s);
   return 0;
}

Đầu ra

Enter elements of array : 2 28 12 32
Sum : 74

Trong ví dụ trên bằng ngôn ngữ C, nếu chúng ta thực hiện truyền rõ ràng, nó sẽ không hiển thị bất kỳ lỗi nào.

Sau đây là cú pháp cấp phát bộ nhớ trong ngôn ngữ C ++.

pointer_name = (cast-type*) malloc(size);

Đây,

pointer_name - Bất kỳ tên nào được đặt cho con trỏ.

kiểu đúc - Kiểu dữ liệu mà bạn muốn truyền bộ nhớ được cấp phát bởi malloc ().

kích thước - Kích thước của bộ nhớ được cấp phát tính bằng byte.

Sau đây là một ví dụ về malloc () trong ngôn ngữ C ++.

Ví dụ

#include <iostream>
using namespace std;
int main() {
   int n = 4, i, *p, s = 0;
   p = (int *)malloc(n * sizeof(int));
   if(p == NULL) {
      cout << "\nError! memory not allocated.";
      exit(0);
   }
   cout << "\nEnter elements of array : ";
   for(i = 0; i < n; ++i) {
      cin >> (p + i);
      s += *(p + i);
   }
   cout << "\nSum : ", s;
   return 0;
}

Đầu ra

Enter elements of array : 28 65 3 8
Sum : 104

Trong ví dụ trên bằng ngôn ngữ C ++, nếu chúng ta không thực hiện ép kiểu rõ ràng, chương trình sẽ hiển thị lỗi sau.

error: invalid conversion from ‘void*’ to ‘int*’ [-fpermissive]
p = malloc(n * sizeof(int));