C言語 - 高度なポインタ (1)

目次

編集

1. 文字ポインタ

1.1 基本概念

 1.2 面接での質問

2. ポインタの配列

3. 配列ポインタ

3.1 配列ポインタの定義

3.2 & 配列名 VS 配列名

3.3 配列ポインタの使用

4. 配列パラメータ、ポインタパラメータ

4.1 1次元配列パラメータの受け渡し

編集

4.2 2次元配列パラメータの受け渡し

4.3 第 1 レベルのポインタパラメータの受け渡し

4.4 第 2 レベルのポインタパラメータの受け渡し

編集

5. 関数ポインタ

6. エンディング

1. 文字ポインタ

1.1 基本概念

文字列を配列として使用できるかどうかをテストするために出力できます。

答えは「はい」です。つまり、定数文字列をポインター変数に直接格納できる新しい記述方法を学習しました。

 ただし、変更できないという欠点があり、最初の文字 a を指す p を逆参照しようとすると (最初の文字を 'e' に変更する)、エラーが発生します。

したがって、エラーが変更されないように、その前に const を追加できます。

const char* p = "abcdef"

p はアドレスを指します。アドレスは %c では出力できませんが、%s は使用できます。*p は char* のポインタ型であるため、逆参照後に取得できる文字は 1 文字だけであるため、% で出力する必要があります。 c.

 1.2 面接での質問

s1 と s2 がそれぞれのアドレスを指すように異なるスペースを開いていることがわかります。そして const は定数変数なので、複数のコピーがある場合、デフォルトでは 1 つだけあり、s3 と s4 は一意であるため、一緒に同じアドレスのみを指すことができます。

s3 と s4 に格納されているアドレスは同じですが、&s3 と &s4 は異なることに注意してください。これらはアドレスを格納するために独自に開かれたスペースであるためです。スペース アドレスは異なりますが、スペースに格納されているアドレス (つまり、内容)は同じです。

2. ポインタの配列

 

 

 次に、添字を介して配列にアクセスし、アクセスされた配列の添字を介して配列内の要素にアクセスすることを試みます。

 

3. 配列ポインタ

3.1 配列ポインタの定義

 

3.2 & 配列名 VS 配列名

結果は同じですが、最初の 2 つは最初の要素アドレスであり、arr は必ずしもそうではありません。int* は arr のアドレスを取得するために使用され、int* は &arr[0] を取得するために使用されます。これは本質的に内部の要素を見つけるためなので、&arr はそれを受け取るためにどのような種類のポインター変数を使用する必要がありますか?

3.3 配列ポインタの使用

 2 つの点を明確にする必要があります。1 つは種類を決定すること、2 はサイズをマークすることです。

 このように印刷するのは面倒だと思いますが、

 これはポインタの配列ほど便利ではありません

4. 配列パラメータ、ポインタパラメータ

 

4.1 1次元配列パラメータの受け渡し

 //arr[i]-->*(arr+i) (要素全体のアドレス + i ではなく、最初の要素のアドレス + i)

4.2 2次元配列パラメータの受け渡し

2 次元配列パラメータの受け渡しには、次の配列アドレスの要素へのアクセスを容易にするために、配列全体のアドレスを指す配列ポインタが必要です。

p[i]-->*(p+i) は実際には逆参照後の配列名であり、要素にアクセスするための配列名 [j] になります。

 

4.3 第 1 レベルのポインタパラメータの受け渡し

4.4 第 2 レベルのポインタパラメータの受け渡し

5. 関数ポインタ

 

 & 関数名と関数名が同じアドレスであることがわかります。

関数ポインタの書き方:

 *pf2 は括弧で囲む必要があることに注意してください。括弧で囲まないと、戻り値の型が Int* である関数宣言になります。

 通話は成功しました。

 興味深いコード部分を共有します。

 

 

 簡易版:

6. エンディング

ポインタの進歩は確かに非常に複雑であり、このプロセスを継続的に分析してソースまで追跡する必要があります。時々覚えるだけでなく、将来ポインター型に関する問題に遭遇したときにつまづかないよう、ポインターをもっと活用する必要があります。

おすすめ

転載: blog.csdn.net/fax_player/article/details/132520403