1.指针的运算




2.指针运算有意义的操作和无意义的操作、

#include <stdio.h>
int main()
{//前提条件:保证内存空间是连续的//数组int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//获取0索引的内存地址int* p1 = &arr[0];//通过内存地址(指针P)获取数据printf("%d\n", *p1);printf("%d\n", *(p1 +1));//获取5索引的内存地址int* p2 = &arr[5];//p2 - p1间隔了多少时长printf("%d\n", p2 - p1);printf("%p\n", p1);printf("%p\n", p2);return 0;
}
3.野指针和悬空指针
#include <stdio.h>
int* method();int main()
{//野指针:指针指向的空间未分配int a = 10;int* p1 = &a;printf("%p\n", p1);printf("%d\n", *p1);//p2野指针int* p2 = p1 + 10;printf("%p\n", p2);printf("%d\n", *p2);//悬空指针:指针指向的空间已经分配,但是被释放了int* p3 = method();printf("拖点时间\n");printf("%p\n", p3);printf("%d\n", *p3);return 0;
}
int* method()
{int num = 10;int* p3 = #return p3;}
4.void类型的指针
笔记

代码
5.二级指针和多级指针
笔记


程序
#include<stdio.h>
int main()
{//定义变量int a = 10;int b = 20;//定义一级指针int* p = &a;//定义二级指针int** pp = &p;//利用二级指针修改一级指针里面记录的内存地址*pp =&b;//作用2:利用二级指针获取到变量中记录的数据//输出打印printf("%p\n", &a);printf(" % p\n", &b);printf("%p\n", p);printf("%d\n", **pp);//pp表示二级的//➕一个*表示解一下,获取一级里面所记录的内存地址//再➕一个*表示通过一级指针里面所记录的内存地址,再去获取到变量里面的数据return 0;
}