基础篇-指针
时间:2010-12-01 来源:bluesky2254
1.形参在函数定义时并没有分配明确的内存空间,只有当函数被调用时,形参才被分配内存空间,也在此时才从实参单元获取相应的值。一旦函数调用结束,形参所占用的存储空间会被释放。
2.指针作为形参,指针的内容改变,函数返回时这种变化是可以带回的;指针本身的地址改变,函数返回时这种变化将无效。参考 my_pointer.c
3.野指针:指针地址不可预料的指针。主要出现在下面3个地方:
1)指针没有初始化就使用,指针未初始化时就是个野指针;
2)指针用于动态内存分配,free之后该指针就是个野指针,最好让该指针=NULL;
例子:
char *p=(char *)malloc(100);
strcpy(p,"hello world!");
puts(p);
free(p);
if(p!=NULL) //free之后p成为野指针,不一定为空,这里的判断没有用
strcpy(p,"test"); //这里的野指针使用很危险
puts(p);
3)函数返回局部变量地址也会成为野指针,因为局部变量在函数返回后就在栈中被销毁。
例子:
char *test()
{
char str[]="hello";
return str;
}
main()
{
char *p;
p=test();
puts(p); //野指针
}
1)指针没有初始化就使用,指针未初始化时就是个野指针;
2)指针用于动态内存分配,free之后该指针就是个野指针,最好让该指针=NULL;
例子:
char *p=(char *)malloc(100);
strcpy(p,"hello world!");
puts(p);
free(p);
if(p!=NULL) //free之后p成为野指针,不一定为空,这里的判断没有用
strcpy(p,"test"); //这里的野指针使用很危险
puts(p);
3)函数返回局部变量地址也会成为野指针,因为局部变量在函数返回后就在栈中被销毁。
例子:
char *test()
{
char str[]="hello";
return str;
}
main()
{
char *p;
p=test();
puts(p); //野指针
}
相关阅读 更多 +