C言語(配列とポインター)

配列

  char a [n]; nが整数または整数式の場合、可変長配列ではありません。それ以外の場合、配列は可変長です;(c99)
  文字配列は、文字列形式で一度に出力できます。

// 割り当てモード:
文字は A [] = " ABCDE " ;
 int型の A [ 10 {] = 123 }; // NOは0に割り当てられ、
INT Aは[] = { 12345 }; // 長さが計算され、自動的に
INT A [ 10 ] = {[ 3 ] = 3。、[ 5 ] = 5、[ 8 ] = 8。 }; // 指定された割り当て
 @ 次元配列:
INT[ 2 ] [ 3 ] = { 1234 }。
INT [ 2 ] [ 3 ] = {{ 12 }、{ 3 }}。
int a [ 2 ] [ 3 ] = {[ 0 ] [ 1 ] = 1、[ 0 ] [ 2 ] = 2、[ 1 ] [ 0 ] = 3 };
INT [] [ 3 ] = { 1234567 }; //は、行の数を書き込むことができないが、列の数は、指定する必要があり

ポインタ

  変数はデータを格納し、ポインタはアドレスを格納します。

  変数(int(4)、char(1)、float(4)、double(8))とは異なり、ポインターが占有するメモリは4バイトです; [アドレス:&a;値:* a;]

int a = 1 ; int * b =&a ;
 // 割り当てがアドレスでない場合、ポインタは整数データで表される指定された場所を指します
 // アドレスのプレースホルダーは%p

数値名

  これはアドレス情報(配列名ポインター定数)であり、配列の最初の要素のアドレスでもあるため、[array / pointer]は[pointer / array]を使用して要素にアクセスすることもできます。

  配列は、各要素に個別にのみアクセスできます(各要素は左辺値です)配列全体ではありません(関数名には同様のプロパティがあります)

// ポインタと配列名の違い:ポインタは左辺値(変数、アドレスの格納に使用)であり、配列名はアドレス定数(右辺値)です; 
int a、b、c = 0 ;
 int * p [ 3 ] = { " asdf "" qwer "" czxnh " }; // ポインタ配列:ポインタのみを格納する配列; 
int(* p)[ 3 ]; // 配列ポインタ:配列へのポインタ(ポインタの移動単位)配列のサイズです)
 // 値を割り当てるときは、配列のアドレスを割り当てます:int(* p)[3] =&1次元配列名

配列ポインターと2次元配列

  2次元配列

  各要素は1次元配列なので、2次元配列名は最初の1ビット配列のアドレスです。

int array [ 4 ] [ 5 ]; array == array [ 0 ];
 *(array + 1)== array [ 1 ] ==&array [ 1 ] [ 0 ]; // すべてアドレスです。
 前に*を追加しますこの場所の値は取得できます
 //例:*(*(p + i)+ j)== p [i] [j];

  配列ポインタ

  int(* p)[5] = array;

  配列へのポインター

  配列ポインターの移動の単位は、配列サイズです。*(*(p + i)+ j)== p [i] [j];


void(型なし)ポインターとNULL(kong)ポインター
   void* p:型なしポインター、これは任意のタイプのデータを指すことができます;逆参照するときは強制的な型変換が必要です;*(int*)p;
  NULLポインター:どのデータも指しません: [実際、NULLはマクロ定義です:0; #define NULL((void*)0)0アドレスは一般に指されていません];
    ポインタが定義されていてアドレスが不明な場合、NULLを指すことができます[int* p = NULL; 】


二次ポインタ

  ポインタのアドレスを格納します; [1レベルの逆参照は1つのポインタのアドレスのみです]
  第2レベルのポインタはポインタを指すため、第2レベルのポインタの移動の単位はポインタサイズ(4バイト)です

int ** p1、(* p2)[ 4 ]; // p1は第2レベルのポインター、p2は配列ポインター; 
*(p1 + 1)-* p1 = 4 ; // 第2レベルのポインターはintポインターを指すため、スパンは4 
*(p2 + 1)-* p2 = 16 ; // この配列ポインターは長さ4のint配列を指すため、スパンは16です

注:上記のように、配列ポインターが配列を指す場合、*(*(p2 + i)+ j)== array [i] [j]があり、第2レベルのポインターにはこのプロパティがありません。


定数とポインター

  1.マクロ定義:A 'a'を定義します
  。2. const キーワードを使用します  (読み取り専用、書き込み不可):const float pai = 3.14;

定数へのポインタ

const  int * p;
 // 定数へのポインタ、定数へのポインタ。addressが指す値は逆参照によって変更できません。逆参照される値は、別の定数に変更することによって間接的に変更できます
int * const p;
 // 定数ポインターを指し、変数を指します。逆参照によって示されたアドレスの値を変更することはできません。変数の値を変更して、間接参照された値を間接的に変更できます
const  int * const p;
 // 定数への定数ポインター

おすすめ

転載: www.cnblogs.com/TianLiang-2000/p/12713005.html