由a+1与*(a+1)想到的取地址与取值问题

看程序:数组


我恐怕a+1与*(a+1)在二维数组的某些特殊性质(好比一位数组的a+1只表示a的第1号元素地址,二维数组中表示第1行的首地址,结果是同一个地址)指针

引发的,故代码中改成了a+2,此数组为3X4数组。编译


能够看到a+2与*(a+2)的地址是彻底同样的,输出这个地址的值,获得的是17,即第三行的首元素。程序

因此在二维数组中一个下标的表示仍是各个首地址。im


那么为何a+2和*(a+2)表示的是同一个地址呢?*(a+2)不该该是内容吗??二维数组

我猜测:img

指针的定义形如:int *p;co

而在程序编译时对数组名师按首地址处理的,即a就是数组a的首地址,那么a+2就是第二行的首地址了(二维数组)。printf

又问,那么*(a+2)呢?

首先看a,在程序处理时就做为*a来处理的,加*的话就是地址处理??那么说a+2处理时就是做为*(a+2),就是【地址】来处理的。

又问关于指针,指针的*P时不是取值么?

对啊,可是定义的时候是int *p的,这时候就是已经按照地址来处理的。


取值如何取??双星。

好比在直接调用指针 

printf("%d“,*p);

这时候由于已知p为指针,即地址量,至关于*【地址】。

比较:

 cout<<a+2<<endl;                      ———>数组名内部转换成地址     cout<<*(a+2)<<endl;               ———>输出的就是a+2的地址     cout<<**(a+2);                         ———>*【地址】就是去除该地址的值。

相关文章
相关标签/搜索