ポインタと定数

12399 ワード

ポインタと定数(c言語)
  • は定数のポインタ
  • を指す.
  • 定数ポインタ
  • 「定数を指す定数ポインタ」を指すポインタ(二次ポインタ)
  • .
  • まとめ
  • は定数のポインタ
  • を指す.
  • 定数ポインタ
  • 定数
    定数は次のようになります.
    520,‘a’,3.14
    

    または、
    	#define PRICE 520
    	#define A 'a'
    	#define PI 3.14
    

    constキー修飾も使用できます
    	- const int price = 520;
    	- const char a = 'a';
    	- const float pi = 3.14;
    
    // const          
    #include
    int main(){
    	const float pi = 3.14;
    	printf("%f
    "
    ,pi); pi = 3.1415; return 0; }

    エラーが発生します
    error: assignment of read-only variable 'pi'
    

    変数piは読み取り専用なので、ポインタで定数を指し、参照ポインタを解いて値を割り当てると、同じエラーが発生します.
    定数へのポインタ
    #include
    int main(){
    	const int num = 520;
    	const int *p=#
    	*p = 1024;
    }
    
    error: assignment of read-only variable 'pi'
    

    constポインタを変数に向けると
    #include
    int main(){
    	int num = 520;
    	//const int cnum = 888;
    	const int *pc = num;
    	printf("num:%d,%num%p
    "
    ,num,&num); printf("*pc:%d,pc:%p
    "
    ,*pc,pc); *pc = 1024; }

    それでも禁止される
    [Error] assignment of read-only location '*pc'
    

    ただし、変数に値を付けることで*pの値を変更できます.
    定数ポインタ
    #include
    int main(){
    	int num = 520;
    	const int cnum = 888;
    	int * const p = #
    *p = 1024;
    printf("*p:%d
    "
    ,*p); }

    スムーズに出力できますが
    #include
    int main(){
    	int num = 520;
    	const int cnum = 888;
    	int * const p = #
    *p = 1024;
    printf("*p:%d
    "
    ,*p); p = &cnum; printf("*p:%d
    "
    ,*p); }

    これで間違いだ
    「定数を指す定数ポインタ」へのポインタ(2次ポインタ)
    #include
    int main(){
    	int num =520;
    	const int cnum = 888;
    	const int * const p = #
    	const int * const *pp = &p;
    	printf("pp:%p,&p:%p
    "
    ,pp,&p); printf("*pp:%p,p:%p,&num:%p
    "
    ,*pp,p,&num); printf("**p:%d,*p:%d,num:%d
    "
    ,**pp,*p,num); }

    スムーズな印刷
    まとめ
    const修飾変数は読み取り専用の特性を有する
    定数へのポインタ
    ポインタは、異なる定数ポインタを指すように変更できます.異なる変数を指すように変更できます.ポインタが指すデータをインデックスで読み取ることができます.ポインタが指すデータをリファレンスで変更することはできません.
    定数ポインタ
    非常に多くの定数を指すポインタ-ポインタ自体は修正できません-ポインタが指す値は定数を指す定数を修正することができます-ポインタ自体は修正できません-ポインタが指す値も修正できません