#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]本身就是一个地址,根本不需要进行什么转化。
这次随笔的重点在于,复习并巩固了,类型强制转化的本质。