C ++学習---ポインタレコードの前後の自動インクリメントと自動デクリメント

1.最初にポインタを理解します。直接書き込むことはできません。書き直すことも、読み取ることもできます。

#include<iostream>

using namespace std;

int main()
{
	int c;//没有进行初始化,没有分配内存
	int* m = &c;//m指向c,是一块没有初始化的地址,随机。
	cout << c << " " << *m << endl;//虽然可以编译成功,但是错误的。
	int a = 10;
	int* p = &a;
	cout << a << endl;  // a = 10;
	*p = 5;
	cout << a << endl;  //a = 5
	cout << *p << endl; //*a = 5
	return 0;
}

 

2. * p ++、*(p ++)、(* p)++、* ++ p、++ * pの違い

https://blog.csdn.net/ljytower/article/details/85045739

 まず、post ++は最初に値を返し、次に増加します。pre++は最初に増加し、次に値が返されます。

第二に、リア++の優先度はフロント++および*の優先度よりも高くなります。

* P ++ = *(P ++)、続いて++の方が優先度が高くなりますが、値が最初に返されるため、pの値が最初に返され、次に* pが返され、次にポインターpが1つインクリメントされます。したがって、対応する結果は、自己インクリメント前のポインタpの対応する値が出力され、ポインタpが自己インクリメントされることです。

(* p)++、アドレスに対応するpの値を出力します。この値は1増加し、pが指すアドレスは変更されません。

* ++ p、最初はpポインタ++、次に*はp ++と組み合わされます。

++ * p、最初に* pを計算し、次にその値に1を追加します。

3、http://c.biancheng.net/view/227.html

#include<iostream>

using namespace std;

int main()
{
	int a[2][3] = { 1,2,3,4,5,6 };
	for (int i = 0; i < 2; i++) {
		for (int j = 0; j < 3; j++) {
			cout << a[i][j] << " ";
		}
		cout << "\n";
	}
	cout << a << " " << *a+1 << " " << *a+2<< endl;
	cout << *(a + 1) <<" " << *(a + 1)+1 <<" " << *(a + 1)+2 << endl;
// *(a + 1)指的是a[1][0]的地址 *(a + 1)+1指的是a[1][1]的地址
	cout << *(*(a + 1) + 2) << endl;
	cout << *(*(a + 2)) << endl;
// *(*(a + 2))  超过了初始化的范围,会出现莫名的输入。但是地址指向是a[1][2]的下一块地址
	return 0;
}

 

 

 

おすすめ

転載: blog.csdn.net/JACKSONMHLK/article/details/110749168