C言語のポインタの原理に

C言語のポインタで
の学習目標、私たちは、ポインタが何であるかを理解する必要があります。:として、ほとんどの教科書に与えられた定義「変数と呼ばれる変数へのアドレスポインタ」
このように、コンピュータのメモリアドレスに関するすべてのletの話の最初の。我々は、すべてのC言語プログラムを実行すると、ディスクからメモリにロードする必要があることを知っているが、操作を実行します。いわゆる抽象操作は、命令アドレスは、コンピュータプロセッサ、プロセスデータを読み出されることによって理解することができます。メモリに、アドレス、連続したメモリ空間に対応する連続したアドレスに対応する各バイト(8ビット)、収納スペースに格納された値は、プロセッサのアドレスによって得ることができます。理解容易にするために、我々は、コンピュータによってアクセスされる変数の値の原則を含む:我々は、例えば、ローカル変数を定義する場合、短いA = 7を、システムがランダムに連続したメモリの一部の数を割り当てることは、スタック2の各バイトをバイトアドレスが存在します。システムアドレスが変数0x00-0x01に割り当てられていることを想定し、これら2つのバイトは0x00の変数は、その後に従って定義されている私たちは、変数を訪問するとき、我々は最初のアドレスを取得し、00000000と00000111 7を表現するために保存されます基本型(short型)は、対応するデータバイトをフェッチ

我々は、すべての最大アドレスの32ビットプロセッサは、より多くのメモリの4G、プロセッサアクセスよりも、4Gについて、8ビットの16進表現、すなわち最大アクセスアドレスは0xffffffffにアクセスすることができるので、実行するために、4ギガバイト+メモリを32ビットプロセッサをサポートしていないノウハウ少ないです。
その結果、我々はコンピュータアドレスの関連知識を理解して、C言語では、ポインタに対応する最初のアドレスのメモリ空間の数がこの数存在している、あなたは、に注意を払うする必要があり、ポインタは16進定数で表されています。メモリはランダムスタックシステムによって割り当てられているので、私たちは直接それによって特殊なアドレスを保持する変数を導入し、ポインタ上で動作することができない、この変数は、ポインタ変数と呼ばれています。私たちは皆知っている、主に二つの形式を介してデータにアクセスするためのC言語:(アドレス)ポインタ変数の値を取得して、アドレスにアクセスするための2 1.直接変数名アクセス(ダイレクトアクセス)へ。実際には、二つの自然アドレスへのアクセスによって、いわゆる変数名がメモリに存在しないされている言語の翻訳者のためのメモリ空間、コンパイラ制御シンボルテーブルを(アクセスするとき、コンパイラは、変数名に応じて、確認することですシンボルテーブルのデータ構造、プログラムのソースコードは、各識別子と、そのようなデータ型、範囲およびメモリアドレスなどの結合情報または記述の使用、である)アドレス、メモリアクセスをフェッチ

次の4つの側面からC言語のポインタの私達の深い理解
ポインタを介して基準変数(間接アクセス)
ポインタ変数は、アドレス、変数が何であるかをみましょうレビューを格納する変数です。変数:名前、特定の属性を有するメモリセルを表します。データを格納するために使用されます。情報の定義から、我々は、二つの○1変数が特定の値ではなく、○2に記憶された変数記憶部の値が変化してもよい得ることができ

ポインタ変数が定義されている:例えば、変数名* int型イルAが第1のアドレスint型のデータを指すポインタ変数として定義された意味、アドレスポインタ変数である。
ポインタ変数割付:によりP =の割り当てのアドレスポインタ変数の値&、変数のアドレスは、pに割り当てられています。私たちは、アドレスに割り当てられた変数の値をポインタ、究極の目的は、アドレスメモリ変数に格納されたアドレス値を介して動作することです。C言語では、我々は通常
、変数名へのポインタ変数ポインタの具体的な値を表しています。時点= 1(ポイント変数ポイントが1に割り当てられています)。私たちは、ポインタ変数グループ定義型たくもちろん、変数名は型ポインタのグループということだけを指すように変数の定義では、区別
の合計がよく知られているが、直接加えて、変数を操作することができ、また、関数のパラメータとして渡すことができます変数が自然にこのプロパティを持っているように、我々は動作する変数のアドレスに変数の他の機能上を通過するのを助けることができるポインタ変数
のポインタの配列を参照することにより、
参照の方法をポインタ配列を参照するためには、我々は最も簡単な1次元で始まります配列開始。配列の要素への参照配列によって一つの標準方法は、アレイAポインタ方法で、二つの方法にほかなりません。ここで、我々はどのようにメイン参照1次元配列ポインタの方法を探ります。我々はポインタ参照変数、配列、または関数を使用するかどうか、明確でなければならない最初のポイント。私たちは、彼らの最初のアドレスを操作しています。変数の配列に言及する場合、我々は変数最初のアドレスを取得し、宣言の種類に応じて、メモリからのデータの対応するバイトをフェッチします。一次元アレイは、同じタイプのグループ、データの順序集合、参加者の第1のアドレスアレイ、我々は配列ポインタ変数の名前に値を割り当てるように、我々は、ポインタ変数を介してアレイを参照することが可能です。例:int型の[] = {1,3,5,7,9}は、配列要素まずアクセスする方法を我々は、我々は、INT配列変数を指すポインタを定義するP = A. 次に、アドレス(配列である[0]から)のあるP + 2 [2](P + 2)[2] 5。なお、ここで2の値は定義がintであるため、C言語コンパイラは自動的に、上記第一のアドレス0x00のアレイを仮定し、再び2で定義された型の配列に変換しますなければならない4バイト、コンピュータ発見+ 2は0x00 * 4 = 0x08の中を入力して、4つのバイトを削除5

次に、我々はまた、二次元配列の行列として知られている2次元配列を、議論し、二次元配列の理解を可視化するために、我々は、行と列の2次元配列(実際には線形構造を)書きます、我々は、アレイに以前の言及について話しましたすべての最初のアドレスを介し。だから、どのように我々は最初の操作により、行と列のアドレスを表します。3は、例えば、我々はA [3] [4] INT 4つのINTの二次元ラインアレイを定義する、3行4は、図4(最初の行プラス1 0、最初の行の最初の行0の要素を表す、3を表し、0プラス1、0は、我々は最初のアドレスそれの2行目を表す方法を、第1の素子列)を表しますか?最初のアドレスは、アドレス線2を表すために配列名の前に言えば、我々は、+ 2で表すことができます。どのように我々は、第二行はそれの2番目の要素を表して対処していますか?表現するために(A + 2)+2を使用していませんか?私たちはフロントラインへのポインタを追加して明らかではない、これは、ある程度の誤解に指示されます、第二の要素の2行目を表現するのは簡単ですので、彼らは、列へのポインタとなってアドレス(+ 2)+2、我々可能な第2の要素の第2のラインを表すさらなる値(+ 2)+2)。アレイは、メモリ内の連続したメモリ空間であり、我々は、(Aグループタイプバイトの少なくとも一つの要素の最後の要素は、第二部材の第二列の値も*のように表すことができる最初の行よりも第二の行を理解することができ10)。上記ポインタがアクセスされます。どのように我々は、添字とそれを表現するためにランクに対処しますか?実際には非常に単純な、二次元アレイは、多くの場合、上記のように、「アレイのアレイ」[3] [4]と呼ばれる配列名に導かA [3]行の配列を表すように、我々はそれに対処することができるとそれぞれ、[0]、[1 ]、[2]、[3] INT配列名[4]カラムアレイので、上記アレイの行2つの第2要素アドレスは[2]のように表すことができるされていること[2] [2]のように表現される値+2、。

通过指针引用字符串
引用字符串有两种方式:1.利用字符数组 2.用字符指针变量
例如1.char string[14]=”I LOVE CHINA!”;
2.char * string=”I LOVE CHINA!”;
第一种方式我们可以这样理解,系统创建了一个14个字节的内存空间,将字符串逐个存放,最后一位存放‘\0’,数组名代表字符数组首地址
第二种方式中,由于C语言对字符串常量是按照字符数组来处理,但存入后,该字符数组没有名字。因此不能通过数组名引用。只能通过指针变量来引用。上述第二条语句实际是将字符串首地址赋给string

通过指针引用函数
什么是函数指针?我们编译一个函数,编译系统为函数代码分配一段存储空间,这段空间起始地址称为函数指针
定义:>int (*p)(int int)
引用:将拥有相同类型参数的函数名(起始地址)赋给p,p就可以调用该函数

最后再总结一下const关键字在指针中的规则:

Const int p=&i:const在前,表示不能通过指针去修改变变量
Int
const p=&i:const在后,表示p这个指针不能再保存别的地址值

おすすめ

転載: www.cnblogs.com/miaowulj/p/12236154.html