C / C ++での定数ポインターとポインター定数の分析

    C / C ++では、ポインターを変更するためにconstが頻繁に発生し、ポインター定数と定数ポインターが発生します。それはしばしば使用中にめちゃくちゃにされ、そしてこれに対していくつかの分類が行われます。

1.定数ポインター

       名前が示すように、定数ポインターは基本的にポインターですが、定数を使用して装飾されています。これは、ポインターが定数を指していることを示します(実際、後で変数を指すこともあります)。ここでベクトルを指す意味は、ポインターを介して変数の値を変更できないことです。次の例を見てみましょう:

int main(int argc, char *argv[])
{
	const int a = 10;
	int b = 20;
	const int* p_const;
	int *p_variable;
	p_const = &a; // const pointer can point to const or variable
	p_const = &b; // const pointer can point to const or variable
	//p_variable = &a;//[Error] error: invalid conversion from `const int*' to `int*'
	p_variable = &b;// Ok
	//*p_const =100;//[Error] error: assignment of read-only location
	*p_variable = 200;//OK, equal b =200
	b = 300;//b can be aassigned by variable b

	return 0;
}

 

       上記の結果から、結論を導き出すことができます。1.ポインターはconstで変更され、const型の変数または初期化された通常の変数を指すことができます。2. constで変更されたポインターを使用して、ポインターが指す変数の値を変更することはできませんが、変数(初期化後の通常の変数)の値は、変数で定義された変数名で変更できます。3. constで変更されたポインターは、constで変更された変数またはconstで変更されていない変数を指すことができます。ただし、const変更のないポインターはconst変更のない変数のみを変更できるため、C / C ++の仮パラメーターとして、const型のポインターがよく使用されます。指摘された変数の値の変更を回避できるためです。

      つまり、constポインター変数の変更の目的は、ポインターによって変数の値が変更されるのを防ぐことです。

2.ポインター定数

    ポインター定数とは、ポインター変数に格納されているアドレスが定数であり、変更できないことを意味します。フォームは通常、データ型* constポインタとして記述されます。以下に例を示します。

int main(int argc, char *argv[])
{
	int a = 10;
	int b = 20;
	int * const const_pointer = &a; // value of const_pointer is a address
	int *pointer = &b;
	*const_pointer = 100;//ok equal a=100
	*pointer = 200; //ok equal b=200
	const_pointer = &b;//[Error] error: assignment of read-only variable `const_pointer'
	const_pointer ++;//[Error] error: assignment of read-only variable `const_pointer'
	pointer = &a;//OK, value of pointer is a address
	pointer ++;//OK, value of pointer increase by 1
		
	return 0;
}

       上記の例から結論付けることができます。1.ポインター定数に格納されたアドレスは変更できないため、ポインターの割り当てやその他の操作はできませんが、ポインターが指す変数は変更できます(定数ポインター定数は許可されません)。

      つまり、ポインタ定数は通常の変数定数に似ており、初期化後は(ポインタの場合はアドレスである)彼が格納する値は変更できません。

 

10件の元の記事を公開 11のように 20,000以上の訪問

おすすめ

転載: blog.csdn.net/u013323018/article/details/95947432