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.関数定義
    ①.       :
    	   [    ]    (   )
    	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()
                     ,             。