c言語初学-constポインタ


注意:宣言時に初期化する
宣言方法:タイプ名*const変数名1.他の変数を指すことはできません.ポインタのvalueは変更できません.
#include<stdio.h>
void main(){
	int a = 89;
	int * const p = NULL;
	p = &a;

}

 
エラー:error C 2166:l-value specifies const object
2.ポインタでその変数に値を割り当てることができます(変数値はconstではありません)
#include<stdio.h>
void main(){
	int a = 89;
	int * const cp = &a;
	*cp = 188;
	printf("a=%d
",a); }

 
結果:a=188 Press any key to continue
3.const変数を指し、変数の値を変更する(LINIXで実現可能)
#include<stdio.h>
void main(){
	const int b = 89;
	int * const pp = &b;
	*pp = 100;
	printf("b = %d
",b); }

2つ目の宣言方法:constタイプ名*変数名1.pointer to constants定数を指すポインタ定数を指すポインタは、const変数であるかどうかにかかわらず、ポインタによって変数の値を変更することを防止します.
#include<stdio.h>
void main(){
	int x = 123;
	const int *pc = &x;
	*pc = 8989;
	printf("%d
",x); }

 
結果:rror C 2166:l-value specifies const objectは変更できません
2.定数のポインタを指します.このポインタは別の変数を指し、ポインタのvalueは変更できます.
void main(){
	int x = 123;
	int y = 321;
	const int *pc = &x;
	printf("%p
",pc); pc = &y; printf("%p
",pc); }

 
3.定数を指すポインタは、定数を指すポインタは変数の値を変更できないため、通常のポインタに値を割り当てることはできません.通常のポインタに値を割り当てると、
変数の値を変更することはできませんので、できません.
#include<stdio.h>
void main(){
	int x = 123;
	const int *pc = &x;
	int *q = pc;
}

 
エラー:error C 2440:'initializing':cannot convert from'const int*'to'int*'Conversion loses qualifiers
 
3つ目の宣言方法:const int*const変数名ポインタ変数の値とポインタが指す空間の値は変更できません.
 
 
 
深さ:
#include<stdio.h>
void main(){
//       const  ,const        
	const int x = 123;
	const int y = 321;
//     constbianl
	int z = 111;
//           
	const int *p = &x;
//       
	int *const q = &z;
//     const  
	int * w = &z;

	x=y;//    ,  const        ,  const       
	p=&z;//  ,        value        ,           ,                     

  
	*p=10;//  ,        ,               
	*p=y;//  ,  
	p=w;//  ,         value      
	z=5;//  ,z     ,       
	z=x;//  ,x  const        ,      
	*q=x;//  ,const                    
	q=&x;//  ,  x           ,      , q                  
         //         ,  c           
	w=&x;//  ,  x           ,      , w                     
	     //         ,  c           
	w=p;//  ,                           , w                     ,  

                 
	w=q;//  ,  q                  , w            

	
}