使用Memset函数初始化int出现的问题

==========================================================
author :Vange
create-time: 2010-03-10
http://hi.baidu.com/romeroad/blog/item/bad8cffae04001d5b48f318f.html
==========================================================

引用:
================================
// string.h
void *memset(void *s,  int c, size_t n);
================================

看到关键所在了吗?没错,这个函数是在string.h里面声明,所以它不是专门拿来处理内存的(重点)。
memset的操作属于“串操作 ”,专门针对字节(Byte)操作
1个char是1个Byte (8 bit)。1个int是4个Byte(64位操作系统)。

当使用下列函数后(假设内存已经申请)
memset( pchar,  1, 10 * sizeof(char));
memset( pint,     1, 10 * sizeof(int    ));
则出现下列情况(二进制表示)
pchar: 00000001    00000001   00000001   00000001 ......
pint   : 00000001000000010000000100000001   00000001000000010000000100000001 .....

printf(" now : %d, %d, %d /n", *(pchar),*(pchar + 1), *(pchar + 2));   //正常打印为 1,1,1
printf("now : %u, %u, %u /n", *(pint   ),*(pint   + 1), *(pint  + 2)); // 显示: 16843009 ,  16843009, 16843009

而16843009 的二进制位数就是 1000000010000000100000001

到这里一切就明了。

如有错误,请多多指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值