数据类型之间的强制转换
数据类型
数据类型的分类有:简单类型、结构类型、指针类型三种。
- 简单类型:int,folat,double,char,void,enum
- 结构类型:数组,struct,union,class
- 指针类型:*

强制转换
强制转换分为显式转换和隐式转换,一般隐式转换回出现在赋值语句中和数值计算中,而显示转换比较明显,在转换是直接(转换类型)val即可。
在进行隐式转换时,要注意转换的类型是否匹配。
例如:
int a = 0;
float b = 1.0f;
a = b;
此时存储在a的只有b的整数部分,这样得到的结果不精准,有可能会导致错误。
强制转换的一般规则:
- 字节数大的向字节数小的转换,会丢失高字节部分;
- 字节数小的向字节数大的转换,高字节部分会填0;
- 有符号与无符号之间的转换,看值域能否包含,若有符号的大于无符号,则转换成有符号;
- 指针转换的值是其包含的地址;
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
void main(void)
{
unsigned int typeint = 0xffff;
unsigned char typechar = 0xff;
float typefloat = 123.45;
double typedouble = 123.456;
unsigned int *p = &typeint;
unsigned int pinot;
unsigned int typeint2 = 100;
unsigned char *pchar = &typechar;
printf("%d,%d\n",typechar,typeint);
printf("%d\n",sizeof(typeint));
printf("%d\n",sizeof(typechar));
typechar = (unsigned int)typechar;
typeint = (unsigned char)typeint;
printf("%d,%d\n",typechar,typeint);
typeint = (unsigned int)typefloat;
typedouble = (double)typeint;
printf("%d,%f\n",typeint,typedouble);
printf("%d\n",&typeint);
printf("%d,%d,%d,%d\n",*p,sizeof(unsigned int*),*p,p);
pinot = (unsigned int)p;
printf("%d\n",pinot);
p = &typeint2;
printf("%d\n",&typeint2);
printf("%d,%d,%d,%d\n",*p,sizeof(unsigned int*),*p,p);
pinot = (unsigned int)p;
printf("%d\n",pinot);
typeint = 0xffff;
typechar = 0xff;
printf("hello C!\n");
}
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
typedef struct _DATA{
int key;
char *name;
char date;
}DATA,*pDATA;
typedef struct _newDATA{
int key;
char *name;
// char date;
}newDATA,*newpDATA;
unsigned int fun1(pDATA pdata)
{
pDATA i;
if(!(i = (pDATA)malloc(sizeof(DATA))))
{
return 0;
}
i->date = pdata->date;
i->key = pdata->key;
i->name = pdata->name;
return (unsigned int)pdata;
}
void main(void)
{
DATA date1;
DATA date2;
newpDATA date3;
unsigned int hdata;
int a = 10;
int *pa =&a;
//char *str = "liminguang";
date1.key = 100;
date1.name = "liminguang";
date1.date = 123;
hdata = fun1(&date1);
date3=(newpDATA)hdata;
date2.key = date3->key;
printf("date2.key = %d\n",date2.key);
date3->key = 20;
printf("date1.key = %d\n",date1.key);
printf("&date1 = %p\n",&date1);
printf("&date2 = %p\n",&date2);
printf("date3 = %p\n",date3);
printf("&date3 = %p\n",&date3);
printf("hdata = %d\n",hdata);
printf("a = %d\n",a);
printf("&a = %p\n",&a);
printf("pa = %p\n",pa);
printf("&pa = %p\n",&pa);
printf("(int)pa = %d\n",pa);
printf("hello C!\n");
}
博客介绍了C语言数据类型之间的强制转换。数据类型分为简单类型、结构类型、指针类型。强制转换有显式和隐式两种,隐式转换常见于赋值和数值计算,转换时要注意类型匹配。还给出了强制转换的一般规则,如字节数大小转换、有符号与无符号转换等。
299

被折叠的 条评论
为什么被折叠?



