目录
大家好我来更新博客了,欢迎大家的点赞。今天我们来讲指针的下部分内容。
一、指针的运算。
1.1指针加减整数
指针加减整数是指,把指针的后面加上或减去一个整数,就相当于让指针的指向内容发生变化,然后就可以访问相应的变量了。下图模拟实现了strlen函数,通过指针的加减访问不同的元素,如果*str遇到了 '\0'循环停止,那么str加了几次,就是该字符串的长度。
1.2 指针减指针
指针减指针,得出的是指针和指针之间的元素个数。会有正负数。
1.3 指针的关系运算
指针的关系运算需要知道,不支持指针与指向第一个元素之前那个内存位置的指针进行比较的,
允许指针与指向最后一个元素之后的那个内存位置的指针进行比较,什么意思呢我们来画图解释。
可以看一下这个代码:
for(vp = &values[N_VALUES]; vp > &values[0];) { *--vp = 0; }
这个代码是p指针和end指针可以比较。
for(vp = &values[N_VALUES-1]; vp >= &values[0];vp--) { *vp = 0; }
这个代码是p指针和first指针不可以比较。
编译器是可以完成指针的比较的,然而我们应该避免这样写,因为标准并不保证它可行。
二、指针和数组
指针是可以和数组进行连用的,数组首元素地址是数组名。由于指针可以运算,我们可以通过指针的加减来访问数组。注意不同类型指针每一次移动的字节数,比如char一个字节,int四个字节。我们通过代码来验证数组首元素地址是数组名。
可以看到,打印出来的地址是一样的。
注意两种情况:
- sizeof里面的数组名表示整个数组。
- &arr取出的是整个数组的地址。
既然可以把数组名当成一个地址来放到指针中,我们使用指针来访问一个数组就成为了可能。
看以下代码:
指针和数组介绍完毕!
三、二级指针
二级指针存放的是指针的地址。我们可以看一下这个代码:
int main() { int a = 10; int* pa = &a; int** ppa = &pa; //指针变量的地址存入二级指针。 **ppa = 20; printf("%d\n", a); }
**ppa可以访问到a。通过二次解引用就可以修改a的值了。
四、指针数组
指针数组是指,数组里面存放的是地址。通过这个地址可以访问到它所指向的变量,数组。请看以下代码:
好的初阶指针讲解完毕,接下来给大家带来结构体初阶。