C 言語ポインタ アドバンスト-1

 

この記事では、  1. 文字ポインタ2. 配列ポインタ3.ポインタ配列の関連知識を詳しく解説します!

記事が良いと思って頂けましたらワンクリックスリーリンクお待ちしております、皆様の励ましが創作意欲の源です、一緒に力を合わせて、一緒に走って、頂上で会いましょう!

目次

基本的なポインタの知識ポイントを確認します。 

1. 文字ポインタ

面接の質問1

2. ポインタの配列

ポインタ配列シミュレーションを使用して 2 次元配列を実現する

 3. 配列ポインタ

1.& 配列名 VS 配列名

配列名の理解:

2. 配列ポインタの使用


基本的なポインタの知識ポイントを確認します。 

メモリは個々のメモリ ユニットに分割され、各メモリ ユニットには独立した一意の番号が付けられます。これらの番号はアドレスとも呼ばれます。C 言語では、アドレスはポインタとも呼ばれます。

ポインタ(アドレス)は変数に格納して格納する必要があり、これをポインタ変数と呼びます。

1. ポインタは、メモリ空間の一部を一意に識別するアドレスを格納するために使用される変数です。
2. ポインタのサイズは 4/8 バイト ( 32 ビット プラットフォーム /64 ビット プラットフォーム) に固定されています (物理的な電気信号はデジタル信号に変換されます)。
3. ポインタには型があり、ポインタの型によってポインタの + - 整数のステップ サイズと、ポインタ逆参照操作の権限が決まります。
4. ポインタ演算 (整数のポインタ加減算、ポインタのポインタ減算、ポインタの関係演算など)
 わからなかったら初級ポインタで復習できます!

次に、高度なポインターを入力します。

1. 文字ポインタ

ポインタ型には、文字ポインタ char* というポインタ型があることがわかります。
char* のポインタは、char 型の変数のアドレスを格納するために使用されます。
例えば:

別の使用方法は次のとおりです。

コード const char* pstr = "hello bit." ;
特に学生は文字列 hello bit が文字ポインタ pstr に入れられると考えがちですが、/ は本質的に文字列 hello bit. の最初の文字のアドレスを pstr に入れることです。
上記のコードの意味は、定数文字列の最初の文字 h のアドレスをポインタ変数 pstr に格納することです。
コードの検証:

操作結果:

面接の質問1

質問: 次のコードの最終出力は何ですか?

 分析します:

ここで、str3 と str4 は同じ定数文字列を指します。C/C++ は定数文字列を別のメモリ領域に保存します。複数のポインタが同じ文字列を指す場合、実際には同じメモリ ブロックを指します
ただし、同じ定数文字列を使用して異なる配列を初期化すると、異なるメモリ ブロックが開かれます。ただし、str1 と str2 は最初の要素のアドレスであるため、str1 と str2 は異なり、str3 と str4 は同じです。

操作結果:

2. ポインタの配列

整数配列 -- 整数の配列

文字配列 -- 文字の配列

ポインタの配列 - ポインタの配列
ここでもう一度おさらいしますが、次のポインタ配列は何を意味するのでしょうか?

分析します:

[ ] は * よりも結合性が高いため、まず [ ] と組み合わせて配列を形成します。その後、配列内の各要素の型は int */char */char **; になります。

ポインタ配列シミュレーションを使用して 2 次元配列を実現する

操作結果: 

 3. 配列ポインタ

類推:

整数ポインタ - 整数変数へのポインタ、整数変数のアドレスを格納するポインタ変数。

文字ポインタ - 文字変数へのポインタ、文字変数のアドレスを格納するポインタ変数。

配列ポインタ-- 配列へのポインタ、配列のアドレスを格納する変数。

配列ポインタはポインタですか?それとも配列でしょうか?
答えは「ポインタ」です。
私たちはすでに次のことに精通しています。
整数ポインタ: int * pint; 整数データを指すことができるポインタ
浮動小数点ポインタ: float * pf; 浮動小数点データへのポインタを指すことができます
配列ポインタは次のようにする必要があります: 配列を指すことができるポインタ
次のコードのうち、配列ポインタはどれですか?

分析します:

まず、[ ] の組み合わせ型は * より上位であるため、最初のものは配列であり、配列に格納される変数の型は int * であるため、int* p1[10] はポインターの配列です。

int ( * p )[ 10 ];
//説明: p は最初に * と結合され、p がポインター変数であることを示し、次に 10 個の整数の配列を指します。したがって、 p は配列を指すポインタであり、配列ポインタと呼ばれます。
//ここで注意してください: [] の優先順位は * の優先順位よりも高いため、p が最初に * と結合されるように () を追加する必要があります。

1.&配列名VS配列名

配列名の理解:

配列名は最初の要素のアドレスを表します

ただし例外が 2 つあります

1. sizeof (配列名)、ここでの配列名は最初の要素のアドレスではなく、配列全体のアドレスです。計算は配列全体のサイズであり、単位はバイトです。

2.&Array name、配列名は配列全体のアドレス、&array name は配列全体のサイズです。

次のコード: 

上記のコードによると、実際には &arr と arr は同じ値ですが、意味は異なるはずであることがわかりました。
実際: &arr は、配列の最初の要素のアドレスではなく、配列のアドレスを表します。(じっくり体験してください)
この例の &arr の型は int(*)[10] で、配列ポインター型です。
配列のアドレスは +1 で、配列全体のサイズをスキップするため、&arr+1 と &arr の差は 40 になります。

2. 配列ポインタの使用

配列ポインタは配列を指し、配列のアドレスは配列ポインタに格納される必要があります。
配列ポインタの表現:

配列ポインターを使用して配列の内容を出力します。

 (このような使用はお勧めしません)

一般に、2 次元配列で使用する方が便利です。

例えば:

分析します:

この章の終わり~


おすすめ

転載: blog.csdn.net/2301_77509762/article/details/132015715