指针和多维数组

Posted affectionh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针和多维数组相关的知识,希望对你有一定的参考价值。

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
", 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 
", zippo[0], zippo[1], *zippo[1],zippo[0] + 1, *((zippo[2]) + 1));
    printf(" *zippo =%d, *zippo + 1=%d 
", *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;

//指向多维数组的指针 ,定义形式为 int(*pz)[2];

pz=zippo; 相当于上面例子中zippo 多了个别名 pz  。对zippo的操作和pz的操作 结果一样

 



以上是关于指针和多维数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 typedef、多维数组和指针时出现编译器错误

C 语言数组 ( 多维数组本质 | n 维数组名称本质 是 n-1 级数组指针 )

C 语言数组 ( 多维数组本质 | 步长角度 理解 多维数组本质 )

第34课 多维数组和多维指针

多维数组和多维指针

C之多维数组和多维指针(三十一)