English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Warum werden in C ++eine强制转换malloc() erforderlich, aber C nicht?

In the C language, void pointers are implicitly converted to object pointer types. This functionmalloc()In C89the standard returns void *. In earlier versions of Cmalloc()returns char *. In C ++By default in the languagemalloc()Returns an int value. Therefore, use explicit conversion to convert the pointer to an object pointer.

Hier ist die Syntax, um Speicher in der Sprache C zu zuweisen.

pointer_name = malloc(size);

Hier,

pointer_name-geben Sie jedem Zeiger einen Namen.

Größe-Die Größe des zuweisenden Speichers in Bytes.

Hier istmalloc()C-Sprachbeispiel.

Beispiel

#include <stdio.h>
#include <stdlib.h>
int main() {
   int n = 4, i, *p, s = 0;
   p = malloc(n * sizeof(int));
   if(p == NULL) {
      printf("\nFehler! Speicher nicht zugewiesen.");
      exit(0);
   }
   printf("\nGeben Sie die Elemente des Arrays ein : ");
   for(i = 0; i < n; ++i) {
      scanf("%d", p + i);
      s += *(p + i);
   }
   printf("\nSumme : %d", s);
   return 0;
}

Ausgaberesultat

Geben Sie die Elemente des Arrays ein : 2 28 12 32
Summe : 74

In der obigen C-Sprachbeispiel, wenn wir eine explizite Zwangsweise Konvertierung durchführen, wird kein Fehler angezeigt.

Hier ist ein Beispiel für die Verwendung von C ++Syntax, um Speicher in der Sprache zu zuweisen.

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

Hier,

pointer_name-geben Sie jedem Zeiger einen Namen.

cast- type-Um die Datenart zuzuweisen, die durch Zwangsweise Konvertierung zugewiesener Speicher befreit wirdmalloc().

Größe-Die Größe des zuweisenden Speichers in Bytes.

Hier istmalloc()C ++Sprachbeispiel.

Beispiel

#include <iostream>
using namespace std;
int main() {
   int n = 4, i, *p, s = 0;
   p = (int *)malloc(n * sizeof(int));
   if(p == NULL) {
      cout << "\nFehler! Speicher nicht zugewiesen.";
      exit(0);
   }
   cout << "\nGeben Sie die Elemente des Arrays ein : ";
   for(i = 0; i < n; ++i) {
      cin >> (p + i);
      s += *(p + i);
   }
   cout << "\nSumme : " << s;
   return 0;
}

Ausgaberesultat

Geben Sie die Elemente des Arrays ein : 28 65 3 8
Summe : 104

In der obigen C ++In der Sprachbeispiel, wenn wir keine explizite Konvertierung durchführen, zeigt das Programm folgenden Fehler an.

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