【时时三省】(C语言基础)指针进阶 例题7
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省
二维数组
第一个a 因为它有12个元素 每个元素占4个字节 所以就打印48
第二个a[0][0] 表示是第一行第一个元素 所以它算的就是第一行第一个元素所占的大小 所以就打印4
第三个a[0]它就可以理解为 第一行的数组名 所以它就是计算的第一行的大小 所以它就是打印16
第四个a[0]+1 a[0]作为数组名并没有单独放在sizeof内部 也没有取地址 所以a[0]表示的是第一行第一个元素的地址 a[0]+1就是第一行第二个元素的地址
第五个*(a[0]+1) 这个是解引用的第一行第二个元素的地址 因为它是int类型 所以打印4个字节
第六个a+1 a代表首元素地址 对于二维数组来说 首元素就是代表第一行 +1就表示第二行的地址 所以他就打印4
第七个*(a+1) a+1代表第二行的地址 然后解引用 第二行有4个元素 每个元素4个字节 所以它就是打印16
第八个&a[0]+1 &a取出来的是整个数组的地址 &a[0]取出来的是第一行的地址 +1就表示的第二行的地址 所以就是打印4
第九个*(&a[0]+1) 这个表示第二行的地址 解引用以后计算的就是第二行的所有元素的大小 就是打印16
第十个*a a表示首元素地址 首元素就是第一行的地址 第一行的地址解引用以后就是打印16
第十一a[3] a[3]其实是第四行的数组名(如果有的话)所以其实不存在 也能通过类型计算大小的 所以它就打印16