为什么我闷要进行类型转换,因为减少编译器的警告。
一般类型转化分为隐式和显示的。
什么是隐式:就是系统帮我们做的系统转换就是隐式的。
例如: 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.