一:
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
printf("x=%d,y=%d\n",x,y);
}
void main()
{
int a,b; //a,b是实参。
scanf("%d,%d",&a,&b);
swap(a,b);
printf("a=%d,b=%d\n",a,b);
system("pause");
}
运行结果:
输入:2,5
输出:x=5,y=2
a=2,b=5
二:
void main()
{
int a,b; //a,b是实参。
scanf("%d,%d",&a,&b);
swap(a,b);
printf("a=%d,b=%d\n",a,b);
system("pause");
}
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
printf("x=%d,y=%d\n",x,y);
}
运行结果:
输入:2,5
输出:a=5,b=2
上面的两个为什么运行结果完全不同?第二个中的a,b的值怎么互换了?不是形参不能传递给实参吗?为什么第二个传递了?
被调函数与主调函数的代码顺序,与执行的结果没有关系的。
被调函数放在主调函数后,需要先声明被调用的函数。否则,编译无法通过的。
写在后面,编译器根本不承认你的函数的存在。之所以还能运行,是因为系统库函数碰巧也有一个swap
编译器是顺序编译的,所以在编译主调函数的时候,检索到被调函数,如果在主调函数没有声明或者定义实现,对于编译器来说就是陌生的东西~编译器不知道如何处理,就会停止编译,并报错
被调函数如果放在主函数前面就不要再声明函数。如果被调函数放在主函数之后而没有在主函数声明函数就会运行报错,所以放在主函数后面应该在主函数之前先声明下被调函数!
编译器之间有顺序的,一定要注意前后顺序。
编译器确实是有编译顺序的,应该注意先写主函数。
以下是我的测试代码,所以我怀疑你的代码与你帖出来可能不太一样。
// ConsoleAppVCPlus.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
void swap(int x, int y);
int _tmain(int argc, _TCHAR* argv[])
{
int a, b; //a,b是实参。
scanf("%d,%d", &a, &b);
swap(a, b);
printf("a=%d,b=%d\n", a, b);
getchar();
}
void swap(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
printf("x=%d,y=%d\n", x, y);
}
/*
VS2015 运行结果:
2,5
x=5,y=2
a=2,b=5
*/
第二个调用swap不是调用你写的swap函数,不然怎么没输出x,y
被调用的函数在主函数前先声明后调用
你看看我贴上来的代码不是报错了么?你有可能把代码贴错了吧!
这个。。。入口不是main函数?
至于被调函数在前边后边貌似没关系吧!
被调用的函数在被调用前一定要有原型声明