通过上一篇我们对指针有了最基本的了解,知道了他就是存放一个地址的东西,但相对指针的用法,我将再次谈谈指针那些基本用法;

        指针的运算:

指针也是可以进行 ++、-- 或者 +、- 的运算,但指针的预算仅限于此了,++、+ 代表指针向前移,--、-
代表指针向后移。所指的也是它所指的地址向前或者向后;

        就好比接下来这个程序:
int a[10]; int *p; p = &a; //p指向a数组 i = 0; for(i;i<10;i++) {
printf("%p",p);//输出现在p所指的位置 P ++; //p所指的位置加一 }
        这个程序输出的都是a数组中各项的地址;

当把一个数组的地址给到一个指针时,这个指针指的时
a【0】的地址,也就是数组第一个数的地址,因为数组的排列,在内存中给到的位置空间时连续的,所以当我们让指针所指的值加一时,就意味着指向这个数组中的接下来的地址;

        指针的关系运算:

两个指针之间的关系,大小等等,比较的是所指的地址的关系,而地址的大小,是由ASC||码的值进行提供的;就好比:

int a,*p,*d;

*p = &a;

当在这种情况下

我们说   *p == *d;这就会是个假的;

*d = &a;     

*p == *d;

在这种情况下,这个就会是真的,只有当两个指针同时指向一个一个地址时,这时这两个指针才可以说是相等的。

        指针与数组的关系:

接下来我们着重说说指针与数组之间的关系,他们之间又是怎么样使用的呢;

上面我们谈到,当指针指向一个一维数组时,它所指的地址是这个数组的第一个值的地址,当指针在进行运算+、 - 时,相对应,它所指的地址也会发生变化;

而当指针指向多维数组时,其实也和指向一维数组时差不多的,当时其中的变化时这样的

a【2】【2】;在这个数组中,我们让*p=&a;

最初的 p 是指向 a【0】【0】;

当 p++ 时,就会指向 a【0】【1】;接下来是a【0】【2】;a【1】【0】;a【1】【1】;以此类推;

对于 int a【3】【4】,*p = a【0】;

地址描述意义数组元素的描述意义
a、*a、a【0】、&a【0】【0】、pa的首地址**a、*p、*a【0】、          a【0】【0】a【0】【0】的值
*a+1、a【0】+1、&a【0】【0】+1、p+1a【0】【1】的地址*(*a+1)、*(p+1)、    a【0】【1】、               
           *{a【0】+1)、               *(&a【0】【0】+1a【0】【1】的值
a+1a【1】【0】的地址
**(a+1)、*a【1】、a【1】【0】
a【1】【0】的值
a+ia【i】【0】的地址**(a+i)、*a【i】、              a【i】【0】a【i】【0】的值
*a+ix4+j、p+ix4+j、a【0】+ix4+j、&a【0】【0】+ix4+j、&a【i】【j】a【i】【j】的地址
*(*a+ix4+j)、*(p+ix4+j)、   *(a【0】+ix4+j)、        a【i】【j】、*(&a【0】【0】+ix4+j)
a【i】【j】的值
 

通过这个表,我们基本可以对指针和多维数组之前的关系有了更全面的认识。

注:为了博客的清晰,我用的是【】而不是 [] ,大家可不要学我哦,要用全英文的输入法哦。

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信