深入C语言数据类型转换

我想,大家都常常听人提及,C语言指针的重要性吧,但它重要在哪儿,你们有想过吗?

我们来看一个简单的例子:

int i = 256;
char *a = (char *)&i;
printf("%d,%d,%d,%d\n",*a,*(a+1),*(a+2),*(a+3));

这个例子输出的是 0,1,0,0 (32位及其以上操作系统下)

为什么会是这样一个结果呢?

变量 i 在内存中存储方式  00000000 00000001 00000000 00000000

变量 a 是一个 char 型的指针,我将它指向了 i 在内存中的开始位置,然后对这段内存进行读操作,每次读取 8 位

指针 内存数据 十进制值

00000000 0

a+1  00000001 1

a+2 00000000 0

a+3 00000000 0


这个例子很简单,但它却告诉了我们C语言指针重要性之所在----直接操作内存。直接操作内存有一个好处,实现数据储存与数据读取的完全分离。

C语言没有数据类型行吗?(指针除外)

         答案是模拟两可的,行也不行。

一方面,C语言数据存储与读取是完全分离的,怎么写,怎么读,是你自己的事,完全可以不理会数据类型(前提是分配了足够的内存去存储数据 or 是在已存储数据的位置读取)。

另一方面,存储数据时,数据类型告诉系统,我要多大的内存空间;读取时,它又告诉系统,我要读多少位。如果没有这些数据类型,每次读写数据,都要手动告诉系统我要操作多少内存空间,如果指定的内存大小有一次错误,结果就可能完全不同。

我想你们一定还记得 void * 吧,他可以转换成任意类型的指针。为什么呢?因为 void * 指向了数据的存储位置,转换数据类型后,系统就知道了我要读写多大的内存,自然可行。另外值得提一下的是结构体,你可以把它看做是一大段内存空间,这一大段内存空间又分成了若干小块儿。

国际惯例,来个总结:

C语言数据类型转换只是改变每次读写内存的大小。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值