cノート4
ししん
1ポインタ定義
2ポインタのバインド
3ポインタの初期化【ポインタを定義しながら初期化すべき】
注意【ポインタの演算は、ポインタが指す変数タイプが占めるバイトサイズ(sizeof(int)*1】
野指針危害:
const
1【constとポインタ、近接原則】
2【constキーワード、修飾変数は定数、変更不可.一度だけ初期化できます】
関数の出力型パラメータ
例【主関数省略】
void func_arr(int*arr,int lenth)/===(int arr[])=(int arr[数字]){printf(「arr=%p.sizeof(arr)=%d.」,arr,sizeof(arr));
}
【値を返さなくても主関数の値を変えることができます】
配列とポインタ
【1】【よくわからない】
【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};
typedef
【/typedefは名前の変更のキーワードで、彼は新しいタイプを発明するのではなく、タイプに新しいあだ名をつけた】
関数は1つのアドレスであり、ポインタとしても理解できるので、関数も//タイプという理解方法//タイプ名+変数名//で1つの関数ポインタを定義し、バインドします.C言語では、関数名のバインドには//func、&funcの2つの方法があります.通常はfuncvoid(*p)(void)=&func;//呼び出し関数、ポインタのデリファレンス
mallocダイナミック配列
1 mallocスタック申請のスペース、【デフォルトは最小割当あり】
2申請スペースが成功したかどうかを判断する
3このメモリをクリア
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;
}