zippo[0][0] | zippo[0][1] | zippo[1][0] | zippo[1][1] | zippo[2][0] | zippo[2][1] | zippo[3][0] | zippo[3][1] |
zippo[0] | zippo[1] | zippo[2] | zippo[3] | ||||
zippo | zippo+1 | zippo+2 | zippo+3 |
- int zippo[4][2] = { {1,2}, {3,4}, {5,6}, {7,8} };
- printf("zippo =%d, zippo+1=%d, *(zippo+1)=%d, *(zippo+1)+1=%d,*((zippo+1)+1)=%d, * *(zippo + 1)=%d,*(*(zippo+2)+1)=%d\n", zippo, zippo + 1, *(zippo + 1), *(zippo + 1) + 1, *((zippo + 1) + 1),**(zippo + 1), *(*(zippo + 2) + 1));
- printf("zippo[0] =%d, zippo[1] =%d ,* zippo[1]=%d, zippo[0] + 1=%d, *(zippo[2])+1)=%d \n", zippo[0], zippo[1], *zippo[1],zippo[0] + 1, *((zippo[2]) + 1));
- printf("*zippo =%d, *zippo + 1=%d \n", *zippo, *zippo + 1);
输出:
- zippo =5242296, zippo+1=5242304, *(zippo+1)=5242304, *(zippo+1)+1=5242308,*((zippo+1)+1)=5242312, * *(zippo + 1)=3,*(*(zippo+2)+1)=6
- // zippo 每一次加一, 地址往后退 2 个 int 大小的地址 对其加一后的解引用即 *(zippo+1) 可以理解为 使用了后退 2 个 int 大小后 的第一个 int 地址
所以 *(zippo+1)=zippo+1.*(zippo+1)+1 地址等与 *(zippo+1) 再加一个字节等于 zippo[1][1] 地址. 这样的形式需要解引用 2 次得到值.
- zippo[0] =5242296, zippo[1] =5242304 ,* zippo[1]=3, zippo[0] + 1=5242300, *(zippo[2])+1)=6
- //zippo[0] 相当于 * zippo 所以这样的形式需要解引用 1 次得到值且 [] 的优先级大于 *
- *zippo =5242296, *zippo + 1=5242300=zippo[0] + 1;
来源: http://www.bubuko.com/infodetail-2947324.html