天国にいけるC言語入門 ヘキサ構造体 ver3.2128
p= (char *)malloc(sizeof(char)*100);はp= (char *)malloc(100);と記述することができます
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 *)によって決定されることになります
くわしくは後のエピソードで解説されます
お楽しみに💖
🌞 🌞 🌞 🌞 🌞 🌞 🌞
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます