『征服Cポインタ』ノート

3016 ワード

ポインタ初歩
  • ポインタタイプは、ポインタタイプ変数、ポインタタイプの値(メモリアドレス)に分けられたスカラーとコンビネーションタイプから派生します.
  • void*は任意のタイプのポインタタイプを指すことができ、ANSI Cではすべての変数に強制的に変換せずに値を割り当てることができる.
  • ポインタ演算:ポインタにNを加え、ポインタは「現在のポインタが指すデータ型の長さxN」に進む.
  • 配列とポインタ:式では配列名をポインタとして解読することができ、本質的には&array[0]である.
  • array[i]は*(array+i)の簡単な書き方です.
  • void func(int a[])void func(int*a)
  • void func(int a[][5])void func(int(*a)[5])
  • h[i][j]イコール((hoge+i)[j]イコール(*(hoge+i)+j)

  • Cメモリの使い方
    (  【    】、     )
    (    【   staticstatic  、    】)
    (malloc     )
    (......)
    (    ,        )
  • malloc()
  • はvoid*タイプを返し、free()後に対応するメモリ領域がすぐに破壊されない
  • void* calloc(size_t nmemb, size_t size);
  • p = malloc(nmemb * size); memset(p, 0, nmemb * size);
  • void* realloc(void* ptr, size_t size);

  • メモリレイアウトが整列し、構造体ではintが4バイト、charも4バイト(実際には1バイト)を占めることが多い
  • バイトソート(Byte Order):0 x 123456778
  • リトルエンドバイト:(上)78,56,34,12(下)
  • マクロバイト:(上)12,34,56,78(下)

  • Cの声明
  • ポインタ解読順:識別子->派生タイプ(括弧()、配列[]、関数()、ポインタ*)->データ型修飾子
  • int (*func_p)(double)
    - func_p is
    - func_p is pointer to
    - func_p is pointer to function(double) returning
    - func_p is pointer ot function(double) returning int
  • const修飾子解読順序:識別子から内から外へ解釈し、解釈が完了すると左側にconstが現れ、現在read-onlyが追加される.(const修飾後の単語)
  • char* const src;
    - src is read-only pointer to char
    char const * src;
    - src is pointer to read-only char
  • typdef解読順:先分解、後組合せ
  • typdef char* string; string hoge[10];
    - string is pointer to char; hoge is array of string;
    - hoge is array of pointer to char;