指针,他来了他来了。
指针和指针变量
- 定义指针变量
类型名 *指针变量名
例:int *p;//定义一个指向整型的指针变量
取地址运算符和取值运算符
- 如果需要获取某个变量的地址,可以使用取地址运算符(&):
例:int *p=&f; - 如果需要访问指针变量指向的数据,可以使用取值运算符(*)
例:ptintf("%c,%d\n",*p);
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char a='f';
int f=123;
char *pa=&a;
int *pb=&f;
printf("a=%c\n",*pa);
printf("f=%d\n",*pb);
*pa='C';
*pb+=1;
printf("now,a=%c\n",*pa);
printf("now,f=%d\n",*pb);
system("pause");
return 0;
}
野指针
- 野指针:访问一个已销毁或者访问受限的内存区域的指针,野指针不能判断是否为NULL来避免
- 垂悬指针:指针正常初始化,曾指向一个对象,该对象被销毁了,但是指针未制空,那么就成了悬空指针。
- 出现原因:
1)指针变量没有被初始化
char *p; //野指针,p的值是随机的
正确写法应将指针变量在创建的同时应该被初始化,要么将它设置为NULL,要么让它指向合法的内存:
char *p = NULL //#define NULL 0
char *p = (char*) malloc(100);
2)指针p被free或者delete之后,只是把指针所指的内存释放掉了,没有改变指针的值,此时,p沦落为野指针。
解决此类野指针问题,我们应该当指针指向的内存被释放时,我们也应该将指针置空。