C语言数组、指针强制类型转换
来源:互联网 发布:excel找重复数据 编辑:程序博客网 时间:2024/05/16 05:42
今天在写到代码的时候,因为要将数据写入到flash中去,这块flash规定每次写入两个字节,然后发现了一个挺好玩的事情,那就是类型强制转换。
通过测试发现char类型强制转换成short或者int类型时候,会由原本占据1Byte的数据,变成了占据2Byte的数据或者4Byte的数据。同样,指针类型的也一样,char*类型的指针,通过强制转换成了short*或者int*类型的指针,也会由原来指向1Byte空间的数据,变成了指向2Byte空间的数据或者4Byte空间的数据
下面就是我在vs上做的小测试
测试代码
#include<stdio.h>#include<stdlib.h>//全局变量数组short gStr1[15]; //每个数据占据2字节int gStr2[15]; //每个数据占据4字节//将字符串存到全局变量数组中void ReadStr1(short *buf,int size){ int i; for(i=0;i<size;i++) gStr1[i]=buf[i]; printf("gStr1=%s\n",gStr1); //打印数组 printf("gStr1[0]=%c\n",gStr1[0]); //数组中第一个数据 printf("gStr1[1]=%c\n",gStr1[1]); //数组中第二个数据 printf("gStr1=%s\n",gStr1+1); //打印数组首地址+1后的数据}void ReadStr2(int *buf,int size){ int i; for(i=0;i<size;i++) gStr2[i]=buf[i]; printf("gStr2=%s\n",gStr2); printf("gStr2[0]=%c\n",gStr2[0]); printf("gStr2[1]=%c\n",gStr2[1]); printf("gStr2=%s\n",gStr2+1); }int main(){ char s1[]={"ABCDEFHIJK"}; char s2[]={"abcdefhijk"}; printf("gStr1数组的情况分析:\n"); ReadStr1((short*)s1,5); printf("\n"); printf("gStr2数组的情况分析:\n"); ReadStr2((int*)s2,3); system("pause");//在vs下测试,防止终端显示闪退 return 0;}
编译调试,打印情况如下(由于不会贴图,将就看看吧,哈哈):
gStr1数组的情况分析:gStr1=ABCDEFHIJKgStr1[0]=AgStr1[1]=CgStr1=CDEFHIJKgStr2数组的情况分析:gStr2=abcdefhijkgStr2[0]=agStr2[1]=egStr2=efhijk请按任意键继续. . .
结论分析:
分析gStr1:
gStr1[0]=A
数组的第一个数据为A
gStr1[1]=C
数据的第二个数据为C,说明gStr1[0]里面存放了两个字节,A和B;
验证了char指针类型强制转换成short指针类型,将变成指向的地址可以存放2Byte
大小的数据
gStr1=CDEFHIJK
由这个结果我们可以知道,gStr1+1是指向了gStr1+sizeof(gStr1)地址中的数据,这里的sizeof(gStr1)=2,
而不是1,因为进行了类型强制转换,又char转到了short
分析gStr2:
经过上面的分析,gStr2的情况是一样的,只是short是占用2Byte,而int是占用4Byte,就着点区别而已,
这里就不重复叙述了
注意
可能有些人会对ReadStr1((short)s1,5);这里的5感到疑惑,如果你是想这里传入5,那gStr1数据不应该
只能存入5个字节的数据吗???
printf("gStr1=%s\n",gStr1); //打印数组
这里打印应该是这样才对啊
gStr1=ABCDE
而不是上面打印的那样啊
gStr1=ABCDEFHIJK
上面的打印是正确的,因为进行了数据类型的强制转换,5就代表了存入gStr1数组10个字节了,同理,gStr1也是一个道理
0 0
- C语言数组、指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- C语言: 指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- C语言指针强制类型转换
- ubuntu 离线安装makefile
- test
- 欢迎使用CSDN-markdown编辑器
- NDIS6.0发送以太网包需要遵守的规则
- 利用predis操作redis方法大全
- C语言数组、指针强制类型转换
- Cocos2d-x v3.3 关于Scale9Sprite调用报错。。。
- 云计算的那些事之存储虚拟化
- 例题 9-12 工人的请愿书 UVa 12186
- NYOJ 489 最大流 Dinic 算法
- puts函数的使用
- php计划任务(定时执行函数)
- swustoj搭帐篷说..(0330)
- 15个顶级多线程面试题及答案