虽然之前特意总结了下题目的内容,不过一不小心还是掉进了陷阱里o(╯□╰)o

问题起源于这样一个小题目:

Code Snippet
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void)
  4. {
  5.     int (*ptr)[5] = (int(*)[5]) 100;
  6.     printf("%d\n", (int)(&((*ptr)[1])));
  7.     printf("%d\n", (int)(&((*ptr[1]))));
  8.  
  9.     return 0;
  10. }

 

L5,定了了ptr值为100,ptr是一个数组的指针,数组大小为5.

L6,(*ptr)为int数组的首地址,即100,(*ptr)[1]=ptr+sizeof(int)*1

L7, *ptr[1],ptr地址为100,指向了一个大小为5的数组,20的字节,根据数组+1的定义,ptr+1就意味着要从ptr的位置前进20个字节,即ptr + sizeof(5*sizeof(int))*1