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