ポインタとポインタ変数の違い(C言語)

ヒント: この章では主に C 言語のポインターとポインター変数についての私の理解について説明します。


序文

ポインタは C 言語において非常に重要な概念であり、ポインタの応用をマスターすると、プログラムをより簡潔、コンパクト、効率的にすることができます。ポインタを使いこなせないということは、C言語の本質を使いこなせていないということです。


提示:以下是本篇文章正文内容,下面案例可供参考

1. ポインタとは何ですか?

C 言語を学習すると、変数が定義されると、システムが自動的にその変数にメモリ領域を割り当てることがわかります。コンパイル システムは、プログラムで定義された変数の型に応じて、一定の長さのスペースを割り当てます。
次のような質問について考えてみましょう。
システムによって変数に割り当てられたメモリ空間がどこにあるのかをどうやって知ることができるでしょうか?

まず、現実のシナリオを想像してください。
プールで泳ぎに行くときは、通常、私物を保管するための引き出しが必要です。その後、ウェイターから引き出しの番号が記載された鍵を受け取り、その鍵に従って引き出しを見つけます。キャビネット上の対応する引き出しを選択し、最後にアイテムを引き出しに保管して保管することができます。


上記の例からわかるように、何かを探すとき、正確な場所がわかっていればスムーズに見つけることができますC言語では、記憶領域(キャビネット)内の各記憶単位(ドロワー)にアドレス(番号)があり、Cではアドレスを「ポインタ」として視覚化します。これは、それを通じて、そのアドレスを持つメモリユニットを見つけることができることを意味します)。変数(キー)にはデータが格納されているアドレス値が含まれており、そのアドレスで決まるメモリユニット内のデータにアクセスするために使用されます。

C语言中,指针就是变量的地址。

// 定义一个整型变量a,赋值为3
int a = 3;
// &运算符获取变量a的地址
printf("%o",&a); 

ここに画像の説明を挿入

2. ポインタ変数とは何ですか?

一个变量的值是另一个变量的地址,且变量类型相同,则称该变量为指针变量。

// 定义一个整型变量a,赋值为3
int a = 3;
// 定义一个指针变量p,并初始化为NULL值
int* p = NULL;
// 将a的地址赋值给p
p = &a;

ここに画像の説明を挿入
ノート:

  1. ポインタ変数が定義されると、メモリ空間も割り当てられます。
  2. *記号は、定義された変数がポインタ変数であることを示します。
  3. ポインタ変数の値を変更すると、実際にはポインタが変更されます。
  4. ポインタ変数の型は、指す変数の型と一致している必要があります。

3. 知識の開発

変数がメモリ内で占有する記憶空間の最初のアドレスを変数のアドレスと呼び、変数の記憶空間に格納されたデータが変数の値となります。

野指针:
ポインタが指すスタック メモリ空間が解放されても、それを指すポインタは消滅しません。メモリが解放された後、ポインタの値は実際には変化しません。ポインタは引き続きこのメモリを指しますが、メモリに格納されているデータは失われます。メモリがランダムになり、値(文字化け)のみになります。メモリを解放した結果、メモリに格納されているデータが変更されるだけで、メモリに格納されている内容はゴミとなり、ゴミとなったメモリへのポインタをワイルドポインタと呼びます。
メモリが解放された後、そのメモリへのポインタは自動的に NULL ポインタになりません。また、ワイルド ポインタは NULL ポインタではありません。


要約する

C 言語を学習するには、まずポインタとポインタ変数の違いを理解し、誤解を避ける必要があります。そうすることで、ポインタの演算や計算を理解して応用することができます。

おすすめ

転載: blog.csdn.net/weixin_48627356/article/details/123758920