cノート4


ししん
1ポインタ定義
1、        p,   int*。
2、p    int    【       :* &】
int *p;

2ポインタのバインド
p = &a;
//      ,*p     (a)。
*p = 23;

3ポインタの初期化【ポインタを定義しながら初期化すべき】
int *p1 = &a;   // == int *p, a; p = &a
【int *p=NULL】         

注意【ポインタの演算は、ポインタが指す変数タイプが占めるバイトサイズ(sizeof(int)*1】
野指針危害:
1、        
2、               
3、   ,        

const
1【constとポインタ、近接原則】
【1】int const *p1;
    p1 = &a;
    *p1 = 11; //     error: assignment of read-only location ‘*p1’【p1         ,  p1          】

【2】const int    *    p2; // p2 ,p2      (int)    p1

【3】int * const p3;        //       p3,p3   ,     p3         

【4】const int *const p4;  //                    

2【constキーワード、修飾変数は定数、変更不可.一度だけ初期化できます】
関数の出力型パラメータ
1、                
 2、                

例【主関数省略】
void func_arr(int*arr,int lenth)/===(int arr[])=(int arr[数字]){printf(「arr=%p.sizeof(arr)=%d.」,arr,sizeof(arr));
*arr = 11; // == arr[0] = 11
arr[1] = 22;        

}
【値を返さなくても主関数の値を変えることができます】
配列とポインタ
【1】【よくわからない】
int *p1 = &arr[0];
printf("*p++ = %d.
", *p++)【】 printf("*(p++) = %d.
", *(p++)); printf("*++p = %d.
", *++p); printf("(*p)++ = %d *p = %d.
", (*p)++, *p); printf("*p = %d (*p)++ = %d.
", *p, (*p)++); printf("*p = %d.
", *p); int *q = arr + 5; // , int ret = q - p;

【2】2 D配列
2 D配列、変数名:ヘッダエレメントヘッダアドレス{arr[0]、arr[1]}//arr&arr[0]&arr[0][0]//arrは配列ヘッダエレメントヘッダアドレス(&arr[0])/&arr[0]は1 D配列のヘッダエレメントヘッダアドレス/&arr[0][0]は配列の2 D配列を表すヘッダエレメントヘッダアドレスint arr[2][3]={1,2,3,4,5,6};
//    ,        int[3]       
int (*p)[3]

typedef
【/typedefは名前の変更のキーワードで、彼は新しいタイプを発明するのではなく、タイプに新しいあだ名をつけた】
関数は1つのアドレスであり、ポインタとしても理解できるので、関数も//タイプという理解方法//タイプ名+変数名//で1つの関数ポインタを定義し、バインドします.C言語では、関数名のバインドには//func、&funcの2つの方法があります.通常はfuncvoid(*p)(void)=&func;//呼び出し関数、ポインタのデリファレンス
mallocダイナミック配列
1 mallocスタック申請のスペース、【デフォルトは最小割当あり】
int *p = NULL
p = (int *)malloc(num * sizeof(int));

2申請スペースが成功したかどうかを判断する
if (NULL == p)
{
    printf("malloc error.
"); return -1; }

3このメモリをクリア
memset(p, 0, num*sizeof(int));

4ヒープメモリの解放
1、      ,        
2、    ,    ,      
3、                 
if (NULL != p)
{
    free(p);
    //p       
    p = NULL;
}

return 0;

}