以下C语言代码运行时无法打印length长度值是什么原因
问题原因
- 你在
printf中错误地传入了函数名而非要打印的变量值:- 第一个
printf传入了initialize函数名,实际是把函数的内存地址作为参数传递,同时你的格式占位符有2个%d,但仅提供了1个参数,属于参数不匹配的未定义行为。你要打印矩形的长和宽,应该直接传入结构体成员r.length、r.breadth。 - 第二个
printf传入了changelength函数名,同样是传递了函数地址而非length的数值,要打印length直接传入r.length即可。
- 第一个
- 额外说明:
main函数里单独调用area(r);没有接收返回值的话属于无意义调用,不过你后续打印的时候重新调用了area(r),这部分不影响最终打印结果,仅属于冗余代码。
修正后的可运行代码
#include<stdio.h> #include<stdlib.h> struct rect { int length; int breadth; }; void initialize(struct rect *r,int l , int b) { r->length=l; r->breadth=b; } void changelength(struct rect *r,int l) { r->length=l; } int area(struct rect r) { return(r.length*r.breadth); } int main() { struct rect r; initialize(&r,10,5); changelength(&r,3); printf("The rectangle is %d and %d\n", r.length, r.breadth); printf("The length is %d\n", r.length); printf("The area is %d", area(r)); return 0; }
内容的提问来源于stack exchange,提问作者Rishav
相关产品推荐
相关产品推荐

