1. コンピューターの記憶域 - アドレスとは何かを理解する
コンピュータを購入するとき、通常、そのコンピュータに搭載されているギガバイト数について聞かれますが、最初の部分はメモリを表し、後の部分はハード ドライブを表します。
私たちが学ぶC言語は高級言語であり、その最下層はアセンブリ言語であり、実際には最下層はバイナリの機械語です。
機械語は、コンピューターが直接読んで理解できる言語です。
ソフトウェアをダウンロードする場合、32 ビット コンピュータに適したものや 64 ビット コンピュータに適したものなど、異なるバージョンのソフトウェアが存在する場合もあります。32 ビット コンピュータとはアドレスのサイズが 32 ビットであることを意味し、64 ビット コンピュータとはアドレスのサイズが 64 ビットであることを意味します。
以下では、32 ビット コンピューターを例として取り上げます。
メモリにアクセスしたい場合は、メモリ ユニットを見つけるためのアドレスが必要です。
どうですか?すごいでしょう?アドレスを理解したら、ポインタの導入を開始できます。
2. ポインタの最初の理解
2.1 ポインタ変数の作成
先ほどアドレスを紹介しましたが、ここでポインタを示します。
メモリ番号=アドレス=ポインタ
以下で使用するさらに 2 つの記号を紹介しましょう。
& : アドレス文字を取得します
* : 逆参照文字
ここで注意すべき点は次のとおりです。
(1) ポインタ変数 ap のデータ型は、ポインタ変数のデータ型と同じである必要があります。
(2) ポインタは変数のアドレスを受け取るため、変数のアドレスを取得して = の右側に置く必要があります。これにはアドレス演算子 & が使用されます。
(3) ap の前の * は、ap がポインタ変数であることを示します。* がない場合、ポインタを表すことはどのようにしてわかりますか? ポインターが *ap であると言うのではなく。したがって、ポインタのデータ型を int*、double*... として直接記録することをお勧めします。
(4) ポインタを呼び出すときは、ポインタ変数名 ap の前に * を追加する必要があります。この * は逆参照文字を表します。たとえば、ポインタ変数 ap はロックであり、ロックを開くには key* が必要です。
2.2 ポインタ変数のサイズ
2.2.1 レビュー
まず、さまざまなデータ型が占めるメモリ サイズを思い出してください。
異なるデータ型が異なるメモリ空間を占有することがわかります。右側のメモリ単位はバイトです。
2.2.2 ポインタのサイズ
ポインタ変数はアドレスを格納するために使用されるため、ポインタのサイズはアドレスのサイズによって異なります。
32 ビット マシンでは、ポインターのサイズは 32 ビット、つまり 4 バイトです。
64 ビット マシンでは、ポインターのサイズは 64 ビット、つまり 8 バイトです。
ヒント: 32 ビット マシンに切り替えるときに、VS で 32 ビットマシンと 64 ビット マシンを切り替えることができます。
各ポインタのサイズは 4byte になります。
3. 構造の最初の理解
C 言語を一般的に理解すると、C 言語で作成できる値が単純すぎることがわかりますが、実生活では名前、年齢、身長、体重などの要素がある場合、どのように作成すればよいでしょうか。これらの要素を表現するには C 言語を使用しますか? 構造体、つまり C 言語で複雑なオブジェクトを記述できるツールがあります。
3.1 構造の作成
構造体の作成はメイン関数の上に配置する必要があります。
struct stu{
};
structはキーワードであり、構造体を作成することをコンパイラに伝えます。stu は、関数本体に名前を付けることを意味します。この名前は通常、意味があり理解しやすいものであり、中括弧内に必要な情報を作成できます。
次に、main 関数で構造を定義できます。
Struct stu は先ほど定義した構造体で、実際に使用する際には stu は構造体に付ける名前ですが、その構造体を使用する情報にはそれぞれ名前を付ける必要があるため、struct stu を自己定義した構造体とみなすことができます。データ型は他のデータ型 int および double と同じで、構文はデータ型+命名、つまり struct stu s1 を使用します。
構造情報の入力構文は構造名+{}で、途中の情報はカンマで区切られます。次に、構造体の定義に従って、構造体 s1 の情報を順番に入力します。
3.2 構造情報の印刷
構造を印刷したい場合は、次に何をすればよいでしょうか?
printf 関数では、構造内の各情報を順番に出力します。二重引用符の後に、構造変数に付けた名前を入力し、「.」を追加します。VS は、構造内の情報のキーワードを自動的にポップアップ表示します。
つまり、構造変数.構造メンバー
3.3 ポインタ受け取り関数本体
3.3.1 文法
ポインタの使用法では、データ構造に名前を付けるポインタを直接記憶できると述べました*
構造体の命名では、main 関数の上に定義された構造体をデータ型として直接使用できると述べました。
これを組み合わせると、struct stu * p=&s1 という構文が得られます。
3.3.2 印刷構造
非ポインターとは異なり、ポインターを出力する構造体の構文は次のようになります。構造体ポインター -> 構造体メンバー