如何解决在C中被指针和局部变量混淆
根据我对函数变量的了解,它们不应“生存”在函数范围之外,因此返回局部函数变量应导致错误,我确实收到了我期望的编译警告,但对我来说这没有任何意义因为程序确实有效,我有点困惑
我编写了以下程序:
int * test(int x) {
int f=x+1;
return f; //- int to pointer conversion,idk why this works
}
int main () {
int x = 10;
printf("%d\n",test(x));
}
我首先希望程序崩溃,因为我们在函数返回时从int类型转换为指针,但是显然程序会打印出我没想到的11,我知道这样写真的很不好,无论如何这只是一个巧合的是,我写了这样的东西,它奏效了,此后我有很多疑问
我希望得到的警告:
Solution.c: In function ‘test’:
Solution.c:10:12: warning: return makes pointer from integer without a cast [-Wint-conversion]
return f;
^
Solution.c: In function ‘main’:
Solution.c:15:14: warning: format ‘%d’ expects argument of type ‘int’,but argument 2 has type ‘int *’ [-Wformat=]
printf("%d\n",test(x));
~^ ~~~~~~~
%ls
任何人都可以解释该程序的工作原理吗?
解决方法
您告诉编译器函数test()
应该返回return指向整数的指针。你不知道您返回一个整数值。
编译器说:“您可能在这里做着无意的事情,只是说一遍。我会将此整数强制转换为指针。”
然后编译器说:“您想在此处打印整数值,但您给出的是一个指针。只需说一遍。我会为您将指针转换为整数。”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。