指针和指针变量
指针:存放数据所在内存单元地址的数据类型,指向的是地址。
指针变量:专门用来存放地址类型数据的变量。
野指针
野指针是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的),野指针产生的原因:
1)指针未初始化
int main()
{
int i;//局部变量不初始化,默认随机值
int* p;//局部指针变量不初始化,就被初始化随机值
return 0;
}
指针的初始化,若不知道指针初始指向谁,可先赋值NULL,即:
int* p=NULL;
2)指针越界访问
int main()
{
int arr[10]={0};
int* p=arr;//数组名为首元素地址
int i=0;
for(i=0;i<12;i++)//越界访问
{
p++;
}
return 0;
}
3)指针指向的内存空间被释放
#include<stdio.h>
int* tset()
{
int a=10;//a为局部变量
return &a;
}
int main()
{
int* p=test();
printf("%d\n",*p);
return 0;
}
a为局部变量,当test()函数结束后,a的值会被释放,p只记住了a空间的地址,但原地址已被释放,此刻的访问为非法的。
指针的类型
指针类型决定指针进行解引用操作时,能访问空间的大小,例如:
char* a;//*a一次能访问1个字节
int* b;//*b一次能访问4个字节
double* c;//*c一次能访问8个字节
指针的大小
32位平台是4个字节,64位平台是8个字节,不管指针的类型是什么。