打印
[PIC®/AVR®/dsPIC®产品]

参数为NULL的研究

[复制链接]
623|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wooda|  楼主 | 2020-7-6 14:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wooda 于 2020-7-6 14:40 编辑

各位,如果函数参数是个指针,但是有时候这个指针是null,大家认为代码是怎样的?
我的写法:

...
mail()
{unsigned char * p_arg;
...
p_arg=&value1;
if(xx)p_arg=NULL;

fun(p_arg);
...
}

void fun(unsigned char *parg)
{
  ....
  if (parg!=NULL)     //就是这里要判断
  {
    ....      //代码A
  }

}


然后发现代码A是执行了的。断点打到判断地方发现 parg=0x00,*parg=null
其中编译什么都没问题,其他值的话能正常操作
大家也是这样么?
-----更新-------------
不知道怎么回事,吧

  if (parg!=NULL)     //就是这里要判断
写成
  if (parg!=0x00)     //就是这里要判断
就可以了,只是这样程序的可读性差了点,哎。。。

使用特权

评论回复
沙发
淘猫汤姆| | 2020-7-7 20:27 | 只看该作者
没啥道理啊,你看过对应的反汇编吗

使用特权

评论回复
板凳
wooda|  楼主 | 2020-7-8 15:42 | 只看该作者
看编译器头文件里面NULL是有define的,不知道为啥没有生效~

使用特权

评论回复
地板
淘猫汤姆| | 2020-7-8 20:26 | 只看该作者
wooda 发表于 2020-7-8 15:42
看编译器头文件里面NULL是有define的,不知道为啥没有生效~

看反汇编比较比较直接

使用特权

评论回复
5
wooda|  楼主 | 2020-7-9 14:44 | 只看该作者
bellstudio 发表于 2020-7-8 20:55
你说明一下编译器以及版本比较好

XC8,1.41还是1.48忘记了

使用特权

评论回复
6
淘猫汤姆| | 2020-7-10 17:55 | 只看该作者
show me the code

使用特权

评论回复
7
奔波儿熊| | 2020-7-16 17:17 | 只看该作者
这不科学啊,肯定是哪里搞错了

使用特权

评论回复
8
zljiu| | 2020-8-4 14:22 | 只看该作者
不喜欢操作指针

使用特权

评论回复
9
wiba| | 2020-8-4 14:22 | 只看该作者
我都是用的数组啊

使用特权

评论回复
10
tfqi| | 2020-8-4 14:22 | 只看该作者
对这些操作符真是甘拜下风啊

使用特权

评论回复
11
qcliu| | 2020-8-4 14:23 | 只看该作者
还是容易出问题

使用特权

评论回复
12
nawu| | 2020-8-4 14:23 | 只看该作者
楼主想确定什么问题呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

456

帖子

1

粉丝