目录
五.野指针
一.指针定义
指针:是内存中一个最小单元的编号,也就是地址,地址在C语言中叫做指针,平时说的指针是指针变量,用来存放地址。
int *pa =&a (int *类型pa指针变量&a地址) &a得到的是a的地址,本质上是a的第一个字节
二.指针大小
指针大小:在不同平台上指针大小不同,在同一平台上,不同类型的指针大小相同
在32位地址线的平台上指针大小为4个字节:4*8=32在64位地址线的平台上指针大小为8个字节:8*8=64
三.指针类型
char* (指向字符的指针) ) int* (指向整型的指针) 函数指针(指向函数的指针)等
指针类型具有特殊意义
类型会决定引用的时候的步长大小
void*无具体类型的指针,所以它可以接收任何类型的地z址,就是不能直接解引用与进行加减运算
四.指针运算
1.指针加整数
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int* p =arr;
for (i = 0; i < 10; i++)
{
printf("%d ", *p);
p++;
}
return 0;
}
1.arr表示首元素1的地址
2.p++,指针加1,指针指向的地址会跳过一个arr(int* p =arr)大小,即4个字节,会指向下一个元素,这里数组里面的值依次打印。
2.指针减指针
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int* p = arr;
int i = 0;
printf("%d", (p+5)-(p+3));
return 0;
}
1.p+5指向arr中的6,p+3指向arr中的4
2.指针减指针表示中间相差了多少个元素,这里结果为2
五.野指针
1.野指针的概念:
野指针就是指针指向的位置不可知的。(随机的、不正确的、没有明确限制的)
2.野指针的三种情况
指针未定义,指针越界访问,指针指向的空间释放