通过上一篇我们对指针有了最基本的了解,知道了他就是存放一个地址的东西,但相对指针的用法,我将再次谈谈指针那些基本用法;
指针的运算:
指针也是可以进行 ++、-- 或者 +、- 的运算,但指针的预算仅限于此了,++、+ 代表指针向前移,--、- 代表指针向后移。所指的也是它所指的地址向前或者向后;
就好比接下来这个程序:
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)】注:为了博客的清晰,我用的是【】而不是 [] ,大家可不要学我哦,要用全英文的输入法哦。
推荐阅读
- 笔记|C语言程序设计----初识C语言与程序设计(一)简答
- 笔记|C语言程序设计----初识C语言与程序设计
- 笔记|小白 虚拟机 kali_Linux安装 详细教程
- 打工|为什么iPhone、ipad一直用Lightning而不用type-c()
- CentOS8安装Geant4笔记(Geant4介绍编译和安装)
- C语言函数中的传值和传址
- 使用RT-Thread Studio DIY 迷你桌面时钟二---获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)--基于stm32f103rct6
- 笔记|HTTP协议
- c语言|栈和队列c语言实现详解