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

 首先,后置++,是先返回值,然后再增加;前置++,是先增加,再返回值。

其次,后置++ 的优先级要比前置++和 * 的优先级高。

*P++ = *(P++),后置++ 优先级更高,但是先返回值,所以先是返回p的值,然后*p,然后指针p再加一。因此对应的结果是,输出指针p在自增前对应的值,指针p自增。

(*p)++, 输出 p 对应地址的值,这个值加1,并且p所指的地址不变。

*++p,先是p指针++,然后 * 与p++结合。

++*p,先算*p,然后在其值上加一。

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