指针值传递所遇到的问题
第一 野指针指向空间
```````
inta = 100;
p = 0x1234;//给指针变量p赋值,p为野指针,ok,不会有问题,但没有意义
*p = 1000;//操作野指针指向未知区域,内存出问题,err
``````
第二 const修饰的指针变量
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
intmain(void)
{
//const修饰一个变量为只读
const int a = 10;
a = 100; //err 指针变量,指针指向的内存, 2个不同概念
char buf[] = "aklgjdlsgjlkds";
//从左往右看,跳过类型,看修饰哪个字符
//如果是*,说明指针指向的内存不能改变
//如果是指针变量,说明指针的指向不能改变,指针的值不能修改
const char *p =buf;
// 等价于上面 char const *p1 = buf;
p[1] = '2'; //err
p = "agdlsjaglkdsajgl"; //ok
char * const p2 =buf;
p2 = "salkjgldsjaglk"; //err
const char * constp3 = buf; //p3为只读,指向不能变,指向的内存也不能变
return 0;
}
第三 指针作为值传递遇到的问题
1 指针作为值传递虽然不改变形参的值,但是指针操纵空指针指向的内存,那么就会发生段错误.以下即是实例.
上例虽然把指针赋值为空指针,但是,
fun(p); //值传递,形参视为野指针,形参修改不会影响实参
printf("*p = %d\n", *p);//err,操作空指针指向的内存
2 有人说既然操作空指针指向内存,可能会舍本求末的有以下方法:
各位看官,不知道你们发现了问题没有?我开始也以为万事大吉了.您看,我给指针初始化了,我给指针变量也分配了动态内存空间,编译成功了,哪里还有问题呢?听了我室友的指点我才发现问题.c语言语法规定,局部变量在函数块作用域执行完后,其内存会自动释放.所以说我改来改去在主函数中还是在操纵空指针.根本就是在传递没有意义的指针.程序dang掉.
3 那么,随之而来的解决办法也来了.不多说,直接上图
好.万事大吉.