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;
}