『征服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メモリの使い方 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の声明ポインタ解読順:識別子->派生タイプ(括弧()、配列[]、関数()、ポインタ*)->データ型修飾子 const修飾子解読順序:識別子から内から外へ解釈し、解釈が完了すると左側にconstが現れ、現在read-onlyが追加される.(const修飾後の単語) typdef解読順:先分解、後組合せ
Cメモリの使い方
( 【 】、 )
( 【 static 、 static 、 】)
(malloc )
(......)
( , )
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
char* const src;
- src is read-only pointer to char
char const * src;
- src is pointer to read-only char
typdef char* string; string hoge[10];
- string is pointer to char; hoge is array of string;
- hoge is array of pointer to char;