类型强制转化所具有的性质(指针为例)

#include<stdio.h>
int main(void)
{
 char a[5]={'1','2','3','4','5'};
 int *p=(int *)a;
 
 printf("%c\n",*p);
 p++;
 printf("%c",*p);
 
 return 0;
 }

  在上面这段代码中,我们首先定义了一个字符型数组(这里也考察到一个小细节,这是一个字符数组,不是一个字符串),然后再定义一个指向整型的指针;然后,我们利用类型的强制转化(int *)这就类似于num=12;(double)num;把原本是整型的12在这里转化成了双精度浮点型,但是num仍然是整型。所以说,在这里我们在初始化指针p的值的时候,利用强制转化把a转化成int类型的指针,给p初始化,但是a[5]仍然是字符数组,这不会改变。

  那么这样做的效果在哪儿呢?由于指针p是指向整型的指针,所以我们进行指针运算的时候  p+1  是将p所指向的地址向高地址移动了4个字节,字符数组a[5]一个元素的大小为一个字节,于是p从一开始指向a[0]变为指向a[4],所以打印出来的结果为

1

5

-------------------------------------------------

但是,有一说一,int *p=(int *)a;这样做是没有意义的,因为a的本质是&a[0]本身就是一个地址,根本不需要进行什么转化。

这次随笔的重点在于,复习并巩固了,类型强制转化的本质。

猜你喜欢

转载自www.cnblogs.com/Bullet2YourHeart/p/11930301.html