基本功练习_2_26_之类型转换

本文通过实例探讨了C语言中因类型转换导致的程序错误,特别是当不同类型的整数进行比较时可能发生的问题,并展示了如何使用sizeof操作符正确地获取数组和指针的大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类型转换

先看下面一段程序,这段程序摘自《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字节。

 

测试代码:

#include<stdio.h>
int main(void)
{
 int array[]={1,2,4,5,6};
 char str[]="hello!";
 int a=sizeof(array);
 int b=sizeof(str);
 printf("%d\n",a);
 printf("%d\n",b);
 
 char *str1="hello!";
 char *str2=str1;
 int *array1=array;
 int c=sizeof(str2);printf("%d\n",c);printf("%s\n",str2);
 int d=sizeof(array1);printf("%d\n",d);printf("%s\n",array1);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

doublewei1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值