笔记|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语言---初识指针(2)】注:为了博客的清晰,我用的是【】而不是 [] ,大家可不要学我哦,要用全英文的输入法哦。

    推荐阅读