C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

なぜC++はmalloc()のキャストを必要とするのに、Cは必要としないのですか?


C言語では、voidポインターは暗黙的にオブジェクトポインター型に変換されます。関数malloc()は、C89標準でvoid*を返します。以前のバージョンのCでは、malloc()はchar*を返します。 C ++言語では、デフォルトでmalloc()はint値を返します。したがって、ポインタは明示的なキャストを使用してオブジェクトポインタに変換されます。

以下は、C言語でメモリを割り当てる構文です。

pointer_name = malloc(size);

ここで

pointer_name −ポインタに付けられた任意の名前。

サイズ −割り当てられたメモリのサイズ(バイト単位)。

以下は、C言語でのmalloc()の例です。

#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;
}

出力

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

上記のC言語の例では、明示的なキャストを行ってもエラーは表示されません。

以下は、C++言語でメモリを割り当てる構文です。

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

ここで

pointer_name −ポインタに付けられた任意の名前。

キャストタイプ −malloc()によって割り当てられたメモリをキャストするデータ型。

サイズ −割り当てられたメモリのサイズ(バイト単位)。

以下は、C ++言語でのmalloc()の例です。

#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;
}

出力

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

上記のC++言語の例では、明示的なキャストを行わない場合、プログラムは次のエラーを表示します。

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

  1. C++でのピラミッドのボリュームのプログラム

    ピラミッドのベースのタイプに応じて側面が与えられると、タスクはピラミッドの体積を計算することです。 ピラミッドは、ピラミッドの鋭いエッジを形成する共通点で外面が三角形で交わる3D図形です。ピラミッドの体積は、持つベースのタイプによって異なります。 -のように、ピラミッドを構成できるベースにはさまざまな種類があります。 三角形 -ピラミッドの体積よりも、ピラミッドの底辺が三角形になることを意味します 式-:( 1/6)* a * b * h 正方形 -ピラミッドの体積よりも、ピラミッドの底面が正方形になることを意味します 式-:(1/3)*(b ^ 2)* h 五角形 -ピラミッド

  2. QuickSort用のC++プログラム?

    クイックソートは、比較を使用してソートされていないリスト(配列)をソートするソート手法です。クイックソートは、パーティション交換ソートとも呼ばれます。 等しいソート項目の相対的な順序が保持されないため、安定したソートではありません。クイックソートは配列を操作できるため、ソートを実行するために少量の追加メモリが必要です。常に最悪の場合のパーティションを選択するわけではないことを除いて、選択ソートと非常によく似ています。したがって、選択ソートのより適切な形式と見なすことができます。 QuickSortは、最も効率的な並べ替えアルゴリズムの1つであり、配列を小さい配列に分割することに基づいていま