c语言1warning,这是什么问题(C语言)

本文讨论了C语言中将整数传递给期望指针参数的潜在错误,解释了这种行为在编译时通常被允许的原因。C语言允许整型和指针类型在内存层面的互换,但由于这种灵活性可能导致意外行为,因此在编程时应当格外小心。文章提醒开发者在使用GCC或MinGW等编译器时启用-Wall选项来捕获警告信息,并强调了理解和检查类型转换的重要性,以避免逻辑错误。
摘要由CSDN通过智能技术生成

这段提示翻译(意译)成中文是这样的:

【警告】传递的第3个参数“minA”将整数类型(integer)的数据当做指针(pointer)类型来使用,但这个转换并没有进行转换【默认是允许这样造作的】。

也就是说题主在函数参数传递时将整形数据直接传给了需要接受指针类型的参数,比如下面这个例子:

----------arguments。

c----------

#include

// 此函数直接打印指针的地址

void print_addr(int *ptr) {

? ?printf("The addr is %p。

", ptr);

}

int main(void) {

? ?int num = 100;

? ?

? ?// 此处是一个错误的示例

? ?// 将int num当做实参传递给函数print_addr()

? ?// 这是因为print_addr()的参数是int *而不是int

? ?print_addr(num);

? ?

? ?// 正确的调用方式如下:

? ?// 取得int num的地址后传递给print_add()

? ?// 如此才能获得争取的结果

? ?print_addr(&num);

? ?

? ?return 0;

}

将int直接当做int *或指针明明可能有误,但是为什么还会被允许呢?这是因为在C语言中long、int、char、short、byte、指针类型(当然也包括它们之间,它们与unsigned关键字之间的组合。

比如long long类型)都被叫做“整数类型”,也就是说这些类型在设计时都是用于保存“整数”的。而且,无论是哪种软硬件平台,无论是哪种操作系统,C语言编译器中的int类型数据的保存空间总是与指针类型相同!所以,int类型与指针(不论是指向何种类型,一维、二维还是更多维度的)类型其实只是通过编译器进行了类型的区分,使用int完全可以存储指针类型的数据(并且也真有这么使用的)!

这样设计的好处是使用灵活。

毕竟C语言的设计初衷就是给“专业人士”使用的高效工具。设计者认为既然使用C语言的人都是专家,所以这些类型之间的相互关系和转换都需要自行检查清楚。

这样设计的缺点也很明显。无论是新手还是老手,只要稍有不注意都可能会出现意想不到的结果。

所以,我们在使用C语言编译器调试程序时一定要尽可能多的查看警告信息并引起注意。比如在使用GNU gcc或MinGW编译器时,建议使用下面这种方式进行编译检查:

~> gcc -Wall -g -c argments。c

这样就可以加入调试信息(-g)以及获得最多的警告信息(-Wall)。

要知道,很多时候警告信息就是隐藏得更加深入的错误。当然,没有警告和错误提示也不代表没有问题,这只能说明没有语法错误而已。真正可怕的还是逻辑错误,而这就需要你使用类似于gdb这样的调试工具进行细心、有技巧的分析和查询了。

全部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值