我正在使用一个非常简单的子程序代码,但它没有打印正确的值。 请帮帮我。我的代码是:
#include<stdlib.h>
#include<stdio.h>
main(){
int i, a, b=0.0, c=0.0;
void sum(int a , int b);
for ( i = 0; i < 2; i++ ) {
sum (a, b); c = c+b;
}
printf("%d\n", c);
}
void sum(int a , int b){
int i;
for ( i = 0; i <6; i++ ) {a = i*i;b = b+a;}
}
答案 0 :(得分:2)
sum(int,int)
的效果对调用者不可见,因为a
和b
是按值传递的。您需要使用指针来实现所需的结果:
void sum(int *a , int *b){
for (int i = 0; i <6; i++ ) {
*a = i*i;
*b += *a;
}
}
更改前向声明以使用指针,并调用sum (&a, &b)
来传递指针。
答案 1 :(得分:1)
sum(a, b)
是NOP,您需要传递一个指针:
#include <stdio.h>
void sum(int *a, int *b)
{
int i;
for (i = 0; i < 6; i++) {
*a = i * i;
*b = *b + *a;
}
}
int main(void)
{
int i, a, b = 0.0, c = 0.0;
for (i = 0; i < 2; i++) {
sum(&a, &b);
c = c + b;
}
printf("%d\n", c);
return 0;
}
答案 2 :(得分:1)
您正在按值调用该函数。您应该通过使用指针或引用的引用来调用该函数。
答案 3 :(得分:0)
要添加子程序,您需要使用Call by reference Method。然后只将值正确分配给变量。但是你正在使用Call by Value Method。所以它只会将值的副本传递给子程序函数。子程序中的哪些更改不会影响主函数。请尝试以下更改
#include<stdlib.h>
#include<stdio.h>
main(){
int i, a, b=0, c=0; // fix 1
void sum(int *a , int *b); // fix 2
for ( i = 0; i < 2; i++ ) {
sum (&a, &b); c = c+b; // fix 3
}
printf("%d\n", c);
}
void sum(int *a , int *b){ // fix 4
int i;
for ( i = 0; i <6; i++ ) {*a = i*i;*b = *b+*a;}
}
答案 4 :(得分:0)
#include<stdio.h>
void sum(int *a , int *b);
int main() {
int i, a, b=0.0, c=0.0;
for ( i = 0; i < 2; i++ )
{
sum (&a, &b);
c = c+b;
}
printf("%d\n", c);
}
void sum(int *a , int *b){
int i;
for ( i = 0; i <6; i++ )
{
*a = i*i;
*b = (*b) + (*a);
}
return;
}
<强>输出:强>
165
我已完成所需的代码格式化并将函数参数更改为指针类型。