❤恋するコンピュータサイエンス❤

コンピュータサイエンス、3DCGをもっと楽しく、もっと本質的に!c言語、c++の記事中心です

C言語

C言語おすすめ本

chatGPT がなんでも教えてくれる便利な時代だが、本を読むことは本質及び体系の理解につながり、技術者として生きていく糧になるものだと思う。そのような観点から下記2冊おすすめの本をピックアップしてみた。 ■魔法のcプログラミング各テーマごとに例題…

2次元配列とポインタの関係とは?

Q: char **av ={ "abc", "def", "ghi" }上記のようにavが文字列の集合を指している場合、各文字列とそれぞれの文字にどのようにアクセスできるか? A: char **av が文字列の配列を指している場合、av はそれぞれの文字列の先頭アドレスを指すポインタの配列…

ポインタ理解のコツ③【レファレンス・デリファレンス】

Q,ポインタのレファレンス(参照)・デリファレンス(脱参照)とは何かA. そもそも、ポインタが何故必要かといえばレファレンス・デリファレンスするためといえる。下記用語の理解から始めよう レファレンス(参照)は、変数やデータ構造などが格納されてい…

int *str = "abc" は可能か?

Q. int *str = "abc" は可能か? A. 駄目。 char *str = "abc" としてchar ポインタ型で文字列は宣言しなければならない。 C言語ではint型の変数を直接使って文字列を格納することは許可されていません。その主な理由は以下の通りです: データ型のサイズ: i…

【C言語】文字列を数値に変換する方法(atoi)

そもそも何故このようなatoi関数が必要かというと、コマンドラインで入力した文字列を、10進法のint型にする事で、入力した文字列→整数として扱う為だ。 下記の例をみてみよう。 例えば0,10という数値をコマンドラインに入力した場合、 "0" → 0 "10" → 1…

write 関数の基礎

char n = 48;write(1, &n ,1); Q.上記何が表示されるか答えよ A. `0`が表示される。 文字をWRITE関数で出力する場合、その文字は ASCII コードに基づいた整数値として表現されます。48はASCII コードで、0に対応している為。

EOF とはなにか?

Q. EOFとは何か? A EOFとは "End of File" の略で、ファイルの終わりを示すマーカーまたは特殊な状態を意味します。これは、ファイルの読み取りを行っているプログラムが、これ以上読み取るデータがないことを認識するために使用されます。 C言語では、read…

write関数を深掘りする。(STDOUT_FILENO)

Q. write関数の write(STDOUT_FILENO, buf, n) のSTDOUT_FILENOの意味を説明せよ。 A. STDOUT_FILENOとは標準出力のこと unistd.hライブラリで定義されるマクロ。STDOUT_FILENOを1と書いても同じ意味。 凡人: write(STDOUT_FILENO, buf, n) っていうコード…

配列のアドレスは?

Qdata[];という配列がある。 data &data[0] 上記2つのアドレスは同じか? A 同じアドレスを指す。 &data[0] == data である つまりdataは配列の先頭のアドレスを表示する為の簡易表現ともいえる。

データ型(型)とは?

Q.int a; char c; のように何故型を指定する?A.これから扱うデータの種類・大きさをコンピュータに伝え、予めメモリの大きさをコンピュータに確保しておくため。データ型には下記2種類ある。組み込み型 ⇔ ユーザ定義型組み込み型(すでに決まっている)i…

C言語の配列は0から始まる

Q.下記は何が表示されるか? char m[3] = "abc";printf("%c ", m[1]); A. b 解説C言語の配列は、 「宣言文」と「式」で、全く書き方の意味が異なります。 ■宣言文では、 型 配列名[要素数] です。 int array [3] と書いた場合、int型の要素数を3つ持つ配列a…

NULL ポインタの使い方

ポインタは4つの状態がある。 ①確保したメモリをさしている状態。p = (int*)malloc(sizeof(int) * N); , int &a )②変数宣言直後の状態。どこを指しているかわからない状態。(int *p;) ③解放したメモリを指している状態。④NULL をさしている状態。つまりどこ…

ポインタを理解するコツ②

Q. int *x; *x = 10; (x = &num)上記の違いを説明せよ A. int *x; ポインタ変数定義xがポインタである事を定義している *x = 10; 間接参照演算子 ポインタの参照先の値にアクセスしている 参照先(ポインタが指している)変数の型がintである事を宣言している…

NULLと'\0'と空文字は別物

Q. a[i] = NULL a[i] = '\0' 上記のどちらが正解か? A. a[i] ='\0' が正解である。 a[i] = NULLこれは値がポインタと数値を比較してしまっている為である。解説NULL も\0もいずれも数字の0をあらわしている。NULL とはアドレスが0NULL はマクロ定義 #define…

ポインタ理解のコツ【呼称の整理】

Q,ポインタを一言で説明せよ。A.ポインタとはアドレスを格納する変数。 ポインタはURL、もしくはエイリアス、もしくはショートカットアイコンとイメージすると分かりやすい。URL のリンクをクリックするとWebサイトに飛べる。つまりURL の情報(アドレス)を…