指针与强制类型转换

 我来答
黑科技1718
2022-06-16 · TA获得超过5886个赞
知道小有建树答主
回答量:433
采纳率:97%
帮助的人:82.4万
展开全部

所有类型的数据存储在内存中,都是按照二进制格式存储的。内存中只知道有0和1,不知道它是什么类型的。
int、char、short属于整形,他们的存储方式(数转换为二进制往内存中放的方式)是相同的,只是内存格子大小不同(彼此叫二进制兼容格式);而float、double的存储方式彼此不同,和整形更不同。

int a=5; 时,编译器给a分配4个字节空间,并将5按照int类型的存储方式转化成二进制存到a所对应的内存空间去(a做左值);当printf去打印a的时候此时a做的是右值,printf内部的vsprintf函数会按照格式化字符串所代表的类型(%d,%f)去解析a所对应的内存空间,解析出的值用来输出。

c 语言数据类型的本质是决定了这个数在内存中如何存储,决定了这个数如何转化为二进制。内存只是存储1010序列,而不管1010怎么解析。要求我们对数据类型不能瞎搞。

int short char类型是兼容的 int float dobule数据类型是不兼容的。

指针的本质是变量,指针就是指针变量。
一个指针涉及两个变量:一个是指针变量自己本身,一个是指针变量指向的那个变量。
int *p; :定义指针变量时,p是int 类型, p(p指向的那个变量)是int类型的。int *说白了就是指针类型,只要是指针类型都是占4个字节,解析方式都是按照地址方式来解释(意思是里面存的23个二进制加起来表示一个内存地址)的。

对于指针所指向的那个变量来说,指针类型就很重要。指针指向的变量类型要取决于指针类型。

指针的强制类型转换是有风险的

int和char类型都是整形,是兼容的,强制类型转换时有时候对有时候出错。int有两个字节char只有一个,int能表示的范围比int大,超过范围后int朝char转会出错。char往int就就不会出错(127)。short也有两个字节范围比char大还是比int小(65535)。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式