p= (char *)malloc(sizeof(char)*100);はp= (char *)malloc(100);と記述することができます

ソーラー「先程は


p= (char *)malloc(sizeof(char)*100);


を実行して


メモリを100バイト分確保しました


そのプログラムはこちらです

👇


#include <stdio.h>

#include <stdlib.h>


int main(void) {


char *p ;


p= (char *)malloc(sizeof(char)*100);


if (p == NULL) {

printf("メモリは確保されませんでした。");

}


else {

printf("メモリは確保されました。");

  printf("そのメモリのアドレスは %pです。\n", p);

}


free(p);


return 0;

}


コンパイル結果


メモリは確保されました 。

そのメモリのアドレスは00D94B40です。



p = (char *)malloc(sizeof(char) * 100);



sizeof(char)は何かということですね


sizeof演算子とは


変数の型が何バイトの格納容量を持つかを


示すことができます


char型は1バイトのデータ容量をもつので


sizeof(char)は1


をあらわします


int型は4バイトのデータ容量をもつので


sizeof(int)は4


をあらわします


float型は4バイトのデータ容量をもつので


sizeof(float)は4


をあらわします


float型は8バイトのデータ容量をもつので


sizeof(double)は8を表します


そのプログラムはこちらです

👇


#include <stdio.h>

#include <stdlib.h>//🌞malloc関数を使用するときはヘッダファイル<stdlib.h>をインクルードしてください


int main(void) {


printf("sizeof(char)は%dバイトです\n", sizeof(char));

printf("確保されたメモリは%dバイトです\n", sizeof(char) * 100);


printf("sizeof(int)は%dバイトです\n", sizeof(int));

printf("確保されたメモリは%dバイトです\n", sizeof(int) * 100);


printf("sizeof(float)は%dバイトです\n", sizeof(float));

printf("確保されたメモリは%dバイトです\n", sizeof(float) * 100);


printf("sizeof(double)は%dバイトです\n", sizeof(double));

printf("確保されたメモリは%dバイトです\n", sizeof(double) * 100);


return 0;

}


ビルド実行結果


sizeof(char)は1バイトです

確保されたメモリは100バイトです

sizeof(int)は4バイトです

確保されたメモリは400バイトです

sizeof(float)は4バイトです

確保されたメモリは400バイトです

sizeof(double)は8バイトです

確保されたメモリは800バイトです



アレサ「sizeof演算子の仕組みはこのようになっていたのですね」


ソーラー「となると


(sizeof(char) * 100)は100をあらわすので



p = (char *)malloc(sizeof(char) * 100);



p = (char *)malloc(100);


と記述されるのではないか?



思いませんか?」


アレサ「そういえば そうですの


p = (char *)malloc(100);


ですか?


()の中に100だけが記述されています


はたして実行することができるのでしょうか?



ソーラー「そうさ! 楽しみだね


p = (char *)malloc(100);


が実行できるのか?


そのプログラムを実行してみたいと思います

👇

#include <stdio.h>

#include <stdlib.h>//🌞malloc関数を使用するときはヘッダファイル<stdlib.h>をインクルードしてください


int main(void) {


char* p;


p = (char *)malloc(100);//👈sizeof(char)*100を100と記述しました



if (p == NULL) {

printf("メモリは確保されませんでした。");

}


else {

printf("メモリは確保されました。");

printf("確保したメモリの先頭のメモリのアドレスは %pです。\n", p);

}


printf("確保されたメモリは%dバイトです\n", sizeof(char) * 100);


free(p);


return 0;

}


ビルド実行結果


メモリは確保されました。確保したメモリの先頭のメモリのアドレスは 00D74B40です。

確保されたメモリは100バイトです


アレサ「わあ😊


p = (char *)malloc(100);


も実行できていますの😊


ソーラー「そうさ(^_-)-☆


p = (char *)malloc(100);


も実行することができるんだね」



🌞    🌞    🌞    🌞    🌞    🌞    🌞



      実はメモリを100バイト分確保したいなら


            char* p;  


            p = (char *)malloc(100);


のように


単純に


()の中に100を記述すればよいのですね


            char* p; 


        p = (char *)malloc(sizeof(char) * 100);



char型のデータ容量×100バイト分のデータを確保することを


表していますが


            char* p; 


           p = (char *)malloc(100);


でも同じというわけです


            char* p; 


        p = (char *)malloc(sizeof(char) * 100);



            char* p; 


           p = (char *)malloc(100);


を実行した場合は




確保した100バイト分のメモリには


文字データ'a'のような


char型の形式でメモリに格納されているデータだけしか格納できません


double型の形式でメモリに格納されているデータ1.234567


float型の形式でメモリに格納されているデータ1.11111


int型の形式でメモリに格納されているデータ100


を格納することはできません


そのことは


malloc(sizeof(char) * 100)の部分


つまり


malloc(100)の部分


ではなく


(char *)によって決定されることになります 


くわしくは後のエピソードで解説されます


お楽しみに💖


🌞    🌞    🌞    🌞    🌞    🌞    🌞








  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る