c语言传参传数据类型,c语言传参类型不一致导致数据出错

有如下代码:

#include

void setparam(int *freq,unsigned short *symb,unsigned short *qam)

{

printf("setparam\n");

printf("freq = 0x%x,symb = 0x%x,qam = 0x%x\n",freq,symb,qam);

*freq = 626;

*symb = 6875;

*qam = 64;

printf("freq = %d,symb = %d,qam = %d\n",*freq,*symb,*qam);

printf("setparam\n");

}

int main()

{

int freq = 0;

unsigned short symb = 0;

char qam = 0;

printf("\n");

printf("freq = 0x%x,symb = 0x%x,qam = 0x%x\n",&freq,&symb,&qam);

setparam(&freq,&symb,&qam);

printf("\n");

printf("freq = %d,symb = %d,qam = %d\n",freq,symb,qam);

}

执行结果如下:

freq = 0xbfce8120,symb = 0xbfce811e,qam = 0xbfce811d

setparam

freq = 0xbfce8120,symb = 0xbfce811e,qam = 0xbfce811d

freq = 626,symb = 6656,qam = 64

setparam

freq = 626,symb = 6656,qam = 64

当前平台是小端模式的,即低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。

1d--------1e--------1f--------20--------21--------22--------23--------24

先将 626即 00000000 00000000 00000010 01110010 放入到24至21(小端模式)

然后将6875即 00011010 11011011 放到 1f 和1e里面

然后将64 即 00000000 01000000 分别放到了 1e 1d里面,导致1e里面数据为0,此时1f1e里面的数据变成0001101000000000,转化为 10进制为6656.

此问题只要是传的参数类型不一致导致。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值