指针值传递所遇到的问题

      
 
我也不怕丑,我是个小菜鸟,不如众位大牛那么牛掰.这是我第一次发表微博,如有不妥当请批评指正.
今天我要说的是在学习C语言指针时,在指针变量所指向内存空间所存储的值传递过程中遇到的问题.
所谓指针,不用我在这里瞎白话,他就是一种数据类型.指针变量和指针所指向的内存空间是两个不同的概念
.指针变量也是一种变量,指针变量指向谁,就是把谁的地址赋值给指针变量.而"*"操作符操作的是指针变量指
向的内存空间.这样几个概念就把我们给弄糊涂了.

第一 野指针指向空间

```````

inta = 100;

int *p;
p = a; //a的值赋值给指针变量pp为野指针,ok,不会有问题,但没意义

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  那么,随之而来的解决办法也来了.不多说,直接上图

 

好.万事大吉.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值