C言語ポインタ操作8まとめ

ここに画像の説明を挿入

学ぶ最大の理由は平凡を取り除くことであり、1日早ければ人生はより素晴らしくなり、1日遅ければさらに平凡になります。 


記事の最後には、8 つの主要な項目の詳細な概要が記載されています。 


勉強日記

目次

勉強日記

はしがき編集

1. ポインタの意味 

2. 住所型データには実際には 3 つの情報が含まれています 

3. ポインタ変数の帰納的比較

4. ポインタ演算 

ポインタ変数に整数を加算(減算)します。

ポインタ変数の代入

2 つのポインター変数を減算できます

2 つのポインター変数の比較

空の値

五、ポインタの利点

C言語のポインタ操作


序文

        ここでポインタは、「ポインタ変数」、「ポインタによって参照される配列」、「*ポインタによって多次元配列を参照する」、「ポインタによって参照される文字列」、「*関数へのポインタ」、「*関数」という8つの小さな部分に分割されますポインタ値を返す」、「*ポインタの配列と複数のポインタ」、「* 動的メモリ割り当てとそれへのポインタ変数」。   

1. ポインタの意味 

        「ポインタ」とは、「指す」という関係を鮮やかに表現するC言語の比喩用語であり、その物理的な実現はアドレスによって実現されます。

&a は変数 a のアドレスであり、変数 a のポインタとも呼ばれます。

ポインタ変数とはアドレスを格納する変数であり、ポインタを格納する変数とも言えます。

ポインタ変数の値はアドレスであり、ポインタ変数の値はポインタであるとも言えます。

ポインタ変数はアドレス変数とも呼ばれ、その値がアドレスになります。

& はアドレス演算子、&a は a のアドレス、& はポインタ演算子であるとも言えます。

&a は変数 a へのポインタ (つまり、変数 a へのポインタ) です。

配列名は、配列の最初の要素のアドレスであるアドレスであり、配列の最初の要素のポインタであるポインタであるとも言えます。

関数名はポインタ(関数コード領域の先頭バイトを指す)であり、関数名はアドレス(関数コード領域の先頭バイトのアドレス)であるとも言えます。

関数の実引数が配列名であれば、仮引数に渡されるのはアドレスであり、仮引数に渡されるのはポインタとも言えます。

2. 住所型データには実際には 3 つの情報が含まれています 

① メモリ番号の純粋なアドレスを示します。

② 自身の型、つまりポインタ型。

③それによって識別される記憶装置にどのようなタイプのデータが格納されているか、つまりベースタイプ。

int a;
/* &a为a的地址,它就包括以上3个信息,它代表的是一个整型数据的地址,int是&a的基类型(即它指向的是int型的存储单元)。&a就是“指向整型数据的指针类型”或“基类型为整型的指针类型”,其类型可以表示为“int *”型。*/

ポインターとポインター変数を区別するため。ポインタはアドレスであり、ポインタ変数はアドレスを格納するために使用される変数です。

ポインタ変数の場合、そのアドレスがポインタ変数に格納されているアドレスは、ポインタ変数によって指されていると言われます。

int a,*p;		//p是int*型的指针变量,基类型是int型 
float b;
p=&a;		//a是int型,合法 
p=&b;		//b是float型,类型不匹配

void * ポインターは、いかなる種類のデータもポイントしない特別なポインターです。このアドレスを使用して特定の型のデータを指す必要がある場合は、最初にアドレスに対して型変換を実行する必要があります。

3. ポインタ変数の帰納的比較

変数の定義

型表現

意味

int i;

整数

整数変数 i を定義する

int *p;

int *

p を整数データを指すポインタ変数として定義します。

int a[5];

整数 [5]

5 つの要素を持つ整数配列 a を定義します

int *p[4];

int *[4]

整数データを指す 4 つのポインター要素で構成されるポインター配列 p を定義します。

int (*p)[4];

int (*)[4]

p は 4 つの要素を含む 1 次元配列を指すポインタ変数です。

int f();

int()

f は整数の関数値を返す関数です

int *p();

int *()

p は整数データへのポインタを返す関数です

int (*p)();

int (*)()

p は整数値を返す関数へのポインタです。

int **p;

整数**

p は、整数データを指すポインタ変数を指すポインタ変数です。

ボイド *p;

空所 *

p はポインター変数であり、基本型は void (空の型) であり、特定のオブジェクトを指しません。

4. ポインタ演算 

ポインタ変数に整数を加算(減算)します。

p++;		//将该指针变量的原值(是一个地址)和它指向的变量所占用的存储单元的字节数相加

ポインタ変数の代入

ポインタ変数に変数アドレスを代入します。ポインタ変数には整数を代入しないでください。

p=&a; 		//将变量a的地址赋给p
p=array; 	//将数组array首元素地址赋给p
p=&array[i];	//将数组array第i个元素的地址赋给p
p=max;		//max为已定义的函数,将max的入口地址赋给p
p1=p2;		//p1和p2是基类型相同指针变量,将p2的值赋给p1

2 つのポインター変数を減算できます

両方のポインター変数が同じ配列内の要素を指している場合、2 つのポインター変数の値の差は 2 つのポインター間の要素の数になります。

2 つのポインター変数の比較

2 つのポインターが同じ配列の要素を指している場合、それらを比較できます。前の要素を指すポインタ変数は、次の要素を指すポインタ変数よりも「小さい」です。p1 と p2 が同じ配列を指していない場合、比較は無意味です。

空の値

        ポインター変数は null 値を持つことができます。つまり、ポインター変数はどの変数も指しません。NULL は、整数 0 を表す記号定数です。NULL は stdio.h ヘッダー ファイルで定義されています。 #define NULL 0 これにより、p がアドレス 0 のユニットを指すようになります。システムは、ユニットが他の目的に使用されないことを保証します (有効なデータは保存されません)。

        p の値が NULL であることと、p に値が割り当てられていないことは、2 つの異なる概念です。前者は値を持ち (値は 0)、変数を指しません。後者は p に値を割り当てませんが、p に値がないわけではありませんが、その値は予測不可能な値です。 、p は未知の変数、指定された単位を指す可能性があります。

五、ポインタの利点

プログラムの効率を向上させます。

関数の呼び出し時にポインタが指す変数の値が変化すると、それらの値は呼び出し関数で使用できます。つまり、関数呼び出しから複数の変更可能な値を取得できます。

動的なメモリ割り当てを実装できます。

ポインタが不適切に使用されると、隠れた障害が発生し、発見やトラブルシューティングが困難になります。したがって、ポインタは細心の注意を払って使用してください。

C言語のポインタ操作

C言語のポインタ操作(1) ポインタ変数

C言語のポインタ操作(2) ポインタによる配列の参照

C言語のポインタ操作(3) ※ポインタによる多次元配列の参照 

C言語のポインタ操作(4) ポインタを介して文字列を参照する

C言語ポインタ操作(5) ※関数へのポインタ

C言語のポインタ操作(6) ※ポインタ値を返す関数

C言語のポインタ操作(7) ※ポインタ配列と複数のポインタ 

C言語のポインタ操作 (8) * 動的メモリ割り当てとそれを指すポインタ変数

おすすめ

転載: blog.csdn.net/m0_63794226/article/details/126617644