指针的强制类型转换
1.什么是数据类型?数据类型的作用是什么?
int a = 10;
int数据类型规定了变量a的大小的存储方式。数据类型就只有两种作用,内存那么大,如何进行分配使用,都是靠数据类型。
int short char 数据类型的存储方式相同,只是所规定的内存大小不同,而float 和double和他们都不同。
2.指针的数据类型是什么?
准确的来说,指针是没有数据类型的,所有的指针的类型都是指针类型,也就是说,论是int*p,float *p,还是char*p,都是指针类型,而前面的int,float,char是表明该指针指向的变量的数据类型。
分析:
2.1.
1 2 3 | int a = 10; int * p; p = & a; |
p是指针类型,p指向一个int类型的变量,也就是说如果p本身的地址是0x11111111,那0x11111111,0x111111120x111111130,x11111114这四个地址存放的是一个int类型的变量,要用int去解析该数据得到一个int类型的变量。
2.2.
1 2 | int a = 10; float * p = & a; |
一个float指针去解析int类型的数据百分之百会出错。类型不同,存储方式不同。
2.3.
1 2 3 4 5 6 | int a[] = {0x11223344}; char * p = a; printf ( "*p = %d\n" ,*p); printf ( "*(p+1)\n" ,*(p+1)); printf ( "*(p+2)\n" ,*(p+2)); printf ( "*(p+3)\n" ,*(p+3)); |
分析: p是数组的首元素的首地址,p 打印的是第一个元素,这时候看数组时int类型的,每一元素占4个字节,而p是char类型的指针,一个字节8位存放两个十六进制的数。也就是说*p只能打印出原来数组的一个字节的内容。(p+1)打印数组第二个字节的内容,(p+2)打印数组第三个字节的内容,(p+3)打印数组第四个字节的内容。也就是说打印四次才能把原来的数组0x11223344四个字节的内容打印出来。
3.总结:所有的指针的解析方式都是相同的,指针的类型只是表明这个指针32位存储了一个地址。该地址上存放了一个变量,该变量是什么类型要根据指针的类型。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 上周热点回顾(1.20-1.26)