C|C言語学習(五)

1255 ワード

一、ポインタと配列
	//          
	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
  • 配列名は配列のヘッダアドレスである.
  • ある要素の値を取得する:*(アドレス+オフセット量)
  • ポインタ変数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};
    	int* p = arr;
    	p = &arr[3];
    	printf("%d
    ", p[0]);// arr[3],4 printf("%d
    ", p[-3]);// *(p-3), arr[0],1