C言語の小さなステップ:関数、配列、2ビット配列、ポインタ
7814 ワード
文書ディレクトリ 1.関数定義 2.関数前後関係 3.関数プロトタイプ 4.パラメータ伝達 5.関数のパラメータと変数 5.1ローカル変数 5.2関数庶事 6.配列 7.配列演算 7.1配列の初期化 7.2配列のサイズ 8.2 D配列 8.1二次元配列の遍歴 8.2二次元配列の初期化 9.ポインタ ポインタの&および*演算子 ポインタはパラメータ とする. FAQ 10.ポインタとconst ポインタのconstの場合: がconstを指す場合: const配列保護要素: 11.ポインタ演算 0アドレス: ポインタタイプおよび強制変換 ポインタ動的メモリ割り当て 1.関数定義
1つの関数に複数のreturnを含めることができます.関数に単一の出口を設定したほうがいいです.
2.関数の前後関係
3.関数プロトタイプ
4.パラメータ伝達
5.関数のパラメータと変数
5.1ローカル変数
5.2関数庶事
6.配列
長さ0の配列は作成できるが、int a[0]は役に立たない.
7.配列演算
7.1配列の初期化
7.2配列の大きさ
配列はint b[]=a;//書き方を誤る
8.2 D配列
8.1二次元配列の遍歴
8.2二次元配列の初期化
9.ポインタ
ポインタの&と*演算子
パラメータとしてポインタを使用
配列変数は特殊なポインタです.
よくあるエラー
10.ポインタとconst
ポインタのconstの場合:
constの場合:
const配列保護要素:
11.ポインタ演算
0アドレス:
ポインタタイプおよび強制変換
ポインタダイナミックメモリ割り当て
①. :
[ ] ( )
void sum(int begin,int end){ }
return, return。
②. :
int max(int a,int b){ }
1つの関数に複数のreturnを含めることができます.関数に単一の出口を設定したほうがいいです.
2.関数の前後関係
C 。
。
3.関数プロトタイプ
, “;” , 。
:
、 、
4.パラメータ伝達
: 、 、 、
?
C ;
, ;
,c++/java 。
C , 。
5.関数のパラメータと変数
5.1ローカル変数
①. , ,
, 。
②. 。
③. 。
: ,
: ( )
, : ( ) 。
:
;
, ;
;
;
;
;
。
5.2関数庶事
void f(void); void f();
C , 。
C ;
int main() ;
int main(void);
return 0 :
Windows: if errorlevel 1 …
Unix Bash: echo $?
Csh: echo $status
6.配列
:
[ ];
int number[100];
double weight[20];
c99 :
c99 :
:
,
:
: number[num] = x;
: grades[0];
長さ0の配列は作成できるが、int a[0]は役に立たない.
7.配列演算
7.1配列の初期化
:
int count[] = {1,2,3,4,5,6,7,8,9,10,14,18,};
:
int count[num] = {0};
num, 0。
C99 :
int count[10] = { [4]=2,3,[8]=13 };
, 。
( 3 5 ), 。
。
7.2配列の大きさ
int a[] = {1,2,3,4,};
printf("%d
", sizeof(a)); //16
printf("%d
", sizeof(a[0])); //4
printf("%d
", sizeof(a)/sizeof(a[0])); //4 //
配列はint b[]=a;//書き方を誤る
8.2 D配列
int a[3][6]
a 3 6
8.1二次元配列の遍歴
for(int i=0; i<3; i++){
for(int j=0, j<5; j++){
a[i][j] = i*j;
}
}
8.2二次元配列の初期化
int a[][4] = {
{0,1,2,3},
{5,6,7,8},
};
* , ,
* {},
* ,
9.ポインタ
ポインタの&と*演算子
& :
* :
:int *p = &i;
パラメータとしてポインタを使用
& :
int i=0; fun(&i);
* :
void fun(int* p);
。
配列変数は特殊なポインタです.
よくあるエラー
, , 。
error eg: int *p; *p=12;
10.ポインタとconst
ポインタのconstの場合:
, 。
int* const q = &i; //q const
*q = 19; //ok
q++; //Error
constの場合:
( const)。
const int *p = &i; //(*p) const
*p = 19; //Error
i = 19; //ok
p = &j; //ok
const配列保護要素:
const int a[] = {1,2,3,5,};
const , const int, 。
, , const :
int sum(const int a[], int length);
11.ポインタ演算
*p++ :
++ * 。 。
p , p 。
char ac[] = {0,1,2,3,4,5,6,7,8,9,};
char *p = &ac[0];
while(*p != -1){
printf("%d
", *p++);
}
for(int i=0; i<sizeof(ac)/sizeof(ac[0]); i++){
printf("%d
", ac[i]);
}
;
;
、>=、!= ;
0アドレス:
0 , , 0 ;
0 :
* ; * ( 0);
NULL , 0 。
ポインタタイプおよび強制変換
, ;
:int *p=&i; void* q=(void*) p;
void* ;
p , p 。
ポインタダイナミックメモリ割り当て
#include
Format : void* malloc(size_t size);
Example : (int*)malloc(n*sizeof(int));
, ;
0 NULL。
free()
, 。