类型转换

为什么我闷要进行类型转换,因为减少编译器的警告。

一般类型转化分为隐式和显示的。

什么是隐式:就是系统帮我们做的系统转换就是隐式的。

例如:    int i = 97;

                printf("%c\n",i);

打印出来是'a',可以我们定义的是整形变量,在机器中存放数据都是一ASCII码的形式存放,而97刚好对应的是‘a’,这个是系统帮我们做的类型转换,将整形转换成了字符型。这就是隐式转换。

显示:就是我们自己对数据的类型就行转换。

例如:   int arr[5] = {0};

               char *p = (char *)arr;

由于我们是整型数组,却用以个字符型的指针来存放他,系统这时候就会对我们警告,所以我们将整型的数组强行转化为字符型。这样可以消除警告。

在强制类型转化的时候,我们需要注意的是*(p + 1)和  *(&arr + 1)的区别

例如:   int   arr[5] = {0};

               int *p = arr;

               printf("%d\n",*(p + 1));

               int  *p2 = (int *)(arr + 1);

               printf("%d\n",*(int  *)(&arr + 1))

这里执行printf的时候是对那个地址里面的数据进行打印。*(p + 1) 这个很简单是吧。+4对吧,太简单了。那(int *)(&arr + 1)呢?这我们将其类型转化成了 int  *型的在赋值给int *p2这个指针,所以&arr + 1 是让这个指针指向内存中下一个int型变量所以&arr + 1 是将整个数组的内存都加完是+20.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值