C语言---初识指针(2)
作者:互联网
通过上一篇我们对指针有了最基本的了解,知道了他就是存放一个地址的东西,但相对指针的用法,我将再次谈谈指针那些基本用法;
指针的运算:
指针也是可以进行 ++、-- 或者 +、- 的运算,但指针的预算仅限于此了,++、+ 代表指针向前移,--、- 代表指针向后移。所指的也是它所指的地址向前或者向后;
就好比接下来这个程序:
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】、p | a的首地址 | **a、*p、*a【0】、 a【0】【0】 | a【0】【0】的值 |
*a+1、a【0】+1、&a【0】【0】+1、p+1 | a【0】【1】的地址 | *(*a+1)、*(p+1)、 a【0】【1】、 *{a【0】+1)、 *(&a【0】【0】+1 | a【0】【1】的值 |
a+1 | a【1】【0】的地址 | **(a+1)、*a【1】、a【1】【0】 | a【1】【0】的值 |
a+i | a【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】的值 |
通过这个表,我们基本可以对指针和多维数组之前的关系有了更全面的认识。
注:为了博客的清晰,我用的是【】而不是 [] ,大家可不要学我哦,要用全英文的输入法哦。
标签:所指,指向,C语言,---,地址,初识,数组,ix4,指针 来源: https://blog.csdn.net/weixin_64337113/article/details/122115014