类型转换
先看下面一段程序,这段程序摘自《C专家编程》:
如果是有这样一段程序的话,你永远无法知道x的值到底是多少,因为这句赋值语句x=array[d+1];根本不会执行。原因在哪?经过调试发现程序执行到if语句进行判断完之后,直接跳过下面一条语句的执行。下面来分析一下原因,因为sizeof求算类型大小时的返回值是unsignedint类型,而d是signed int,if语句测试两者大小,d会自动升级为unsignedint,-1转换为unsigned int是一个很大的正整数,所以表达式的值永远为假,因此后面的赋值语句永远不会执行。这里面就是类型转换带来的bug,如果稍不注意,则可能对整个工程或者项目造成无法预测的后果,而这个bug是很难直接调试能够调试得出来的。
int array[] = {1, 2, 4, 5, 6};
char str[] = “hello!”;
性质一样,数组名不能改变大小,sizeof计算的是数组的字节数;
char *str1 = “hello!”;
char *str2 = str;
int *array1 = array;
性质一样,都是指针,可以改变大小,sizeof计算的结果是4字节。
测试代码: