Loading... 对于一个二维数组 ``` array[2][5]={520}; ``` 问1. array表示什么? <div class="tip inlineBlock success"> 答:指向包含5个元素的指针。 </div> 问2. *(array+1)表示什么? <div class="tip inlineBlock success"> 答: array+1同样是表示指向包含5个元素数组的地址,这个时候指向数组的第二行的首地址。 即*(array+1)==array[1] (语法糖)。array[1]又相当于一个数组名,数组名是第一个数组的地址。 所以*(array+1)表示指向第二行子数组的地址。(还是地址哦~) 这里双重解引用有**(array+1)==a[1][0],相当于对地址解引用了嘛~ </div> 问3. 为什么array与*array**array有什么不同? <div class="tip inlineBlock success"> 答: array是作为二维数组的地址 *array是作为二维数组的第一个一维数组的地址。 **array是对上面这个地址解引用得到array[0][0],的值。 由二维数组是[0][0],[0][1]......[0][n-1],[1][0],[1][1]...... 所以二维数组的起始地址和二维数组中第一个一维数组的地址是相同的。 即array与*array的地址一样 </div> 问4. 由问3,知道array与*array地址一样,那这个地址的一样又有什么不同呢? 问5. array是地址,那为什么*array!=array[0][0],而**array==[0][0] ? 最后修改:2020 年 12 月 06 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏
2 条评论
问4. 由问3,知道array与*array地址一样,那这个地址的一样又有什么不同呢?
答:array是二维数组名,代表二维数组第一个元素(即array[0])的地址,也就是&array[0],array[0]是个一维数组,所以array代表的是整个一位数组array[0]的地址,跨度是整个一位数组,就是说array+1是&array[1].
而array,相当于&array[0],&相消,得到array[0],这是个一维数组名,代表一维数组第一个元素的地址,也就是&array0.跨度是一维数组中的元素,也就是说(array)+1就是&array0.
问5. array是地址,那为什么array!=array0,而*array==0 ?
答:这个第四问已经回答的清楚了,array代表的是&array[0],所以array就是&array[0]得到的是array[0],代表的是&array0,再解一层引用,即**array才是array0
是群里的大佬"影子熊"吗?谢谢啦