目录
一、如何规避野指针:
- 指针初始化
#include <stdio.h>
int main(void)
{
int a = 10;
int* p = &a;
return 0;
}
- 小心指针越界
- 使用指针前检测指针有效性(指针为空不能访问)
二、指针运算:
- 指针+-整数
#include <stdio.h>
int main(void)
{
int arr[10] = { 1,2,3,4,5,6 };
int i = 0;
int sz = sizeof(arr) / sizof(arr[0]);
int* p = arr;
for (i = 0; i < 10; i++)
{
printf("%d ", *p);
p = p + 1;
}
return 0;
}
- 指针-指针(两指针必须指向同一个空间)
#include <stdio.h>
int main(void)
{
int arr[10] = {1,2,3,4,5,6};
printf("%d\n", & arr[5] - &arr[0]);
return 0;
}
- 指针的关系运算
C语言标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的内存比较,但不允许与第一个元素前的内存比较。
三、指针与数组:
- 数组名绝大多数情况下是首元素地址
注意:1.&arr - &数组名 - 数组名不是首元素地址,数组名取出的是整个数组的地址
2.sizeof(arr)- 此时数组名也不是首元素地址 而是整个数组的大小
- 二级指针
#include <stdio.h>
int main(void)
{
int a = 10;
int* pa = &a;
int* *ppa = &pa;//ppa就是二级指针
return 0;
}
- 指针数组 - 数组 , 数组指针 - 指针