我已经阅读了指向数组 c++的指针 并对其进行了一些实验。
#include <iostream>
using namespace std;
int main()
{
int g[] = {9,8};
int (*j)[2] = &g;
int *i = g;
int n = (*j)[0];
int m = *(i + 0);
cout << "n:" << n << endl;
cout <<"m:" << m << endl;
cout << "=============" << endl;
cout << "*(j):" << *(j) << endl;//9's address ???
cout << "j:" << j << endl;//9's address ???
cout << "&j:" << &j << endl;//what it is???
cout << "&(*j)" << &(*j) << endl;//9's address ???
cout << "=============" << endl;
cout << "*(i):" << *(i) << endl;//get the value pointered by i
cout << "i:" << i << endl;//i's value store g's address
cout << "&i:" << &i << endl; //i's address
cout << "&(*i):" << &(*i) << endl;//9's address
cout << "=============" << endl;
cout << "*(g):" << *(g) << endl;//get the value pointered by g
cout << "g:" << g << endl;//g's value store 9's address
cout << "&g:" << &g << endl;//9's address???
cout << "&(*g):" << &(*g) << endl;//9's address
return 0;
}
结果是:
n:9
m:9
=============
*(j):0x7fff56076bbc
j:0x7fff56076bbc
&j:0x7fff56076bb0
&(*j)0x7fff56076bbc
=============
*(i):9
i:0x7fff56076bbc
&i:0x7fff56076ba8
&(*i):0x7fff56076bbc
=============
*(g):9
g:0x7fff56076bbc
&g:0x7fff56076bbc
&(*g):0x7fff56076bbc
[Finished in 0.3s]
我想问的是:
1.为什么
int (*j)[2] = &g;
int *i = g;
如果我将其中一个更改为&g
或g
,g
它&g
会产生编译错误,有什么区别?
(我认为数组名是一个指针,为什么我不能使用,它int (*j)[2] = g
的含义是什么&g
,它已经是一个指针,为什么还要获取地址?)
2.&g
和既然g
地址相同,为什么不能交换?
3. 为什么&g
'值是9
'地址?它存储自己的地址吗?
4. 你能解释一下j
可变部分吗?我不明白为什么要j
存储9
's 地址并*(j)
获取9
's 地址,&(*j)
还要获取9
's 地址?
我现在对此感到非常困惑。我完全理解的是i
可变部分,
g
可变部分对&g
, 和j
varialbe 部分都感到困惑。int (*j)[2] = &g;
部分也很混乱。