C|C言語学習(五)
一、ポインタと配列配列名は配列のヘッダアドレスである. ある要素の値を取得する:*(アドレス+オフセット量) ポインタ変数pと配列arrの違い:1.ポインタ変数pは変数である.配列名arrは定数です.2.sizeof(p)の値は4である.sizeof(arr)の値は、要素個数*sizeof(配列タイプ)です. 【ポインタ変数+1】は、【ポインタ変数の現在値、すなわちメモリアドレス、+sizeof(データ型)】に等しい. 二、ポインタ演算両ポインタが減算された結果、両ポインタのオフセット量(ステップ長)が得られた. すべてのポインタタイプが減算され、結果はintタイプになります. ポインタの加減演算はポインタのタイプに関係する:1.ポインタタイプがint*の場合、+1の結果はintのサイズ(4バイト)を1つ増やします.2.ポインタタイプがchar*の場合、+1の結果はcharのサイズ(1バイト)を1つ増やした です.ポインタが配列を操作するとき、下付きスケールは負の数を許可します.
//
int arr[] = {1,2,3,4,5,6,7,8,9};
//p
int* p = arr;
// arr[1]
arr[1] = 20;
p[1] = 20;//
// arr[0]
printf("%d
", arr[0]);//1
printf("%d
", *arr);//1
printf("%d
", *(arr+0));//1
printf("%d
", *p);//1
printf("%d
", p[0]);//1
// arr[1]
printf("%d
", arr[1]);//20
printf("%d
", *(arr+1));//20
printf("%d
", *(p+1));//20
printf("%d
", p[1]);//20
int arr[] = {1,2,3,4,5,6,7,8,9};
int* p = arr;
p = &arr[3];
printf("%d
", p[0]);// arr[3],4
printf("%d
", p[-3]);// *(p-3), arr[0],1