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;
}