C语言中关于函数调用的理解

 理论

关于函数调用的方式有两类:传值调用传址调用

传值调用:函数的形参和实参分别占有不同的内存块,对形参的修改不会影响实参

传址调用:把函数外部创建变量的内存地址传递给函数参数的一种调用方式。可以让函数和函数外面的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量

我们可以用一串代码来解释这两者的区别

#include
int fun1(int a,int b)
{
    int c;
    c=a;
    a=b;
    b=c;
}
int fun2(int *pa,int *pb)
{
    int d;
    d=*pa;
    *pa=*pb;
    *pb=d;
}
void main(){
	int a=10,b=20;
    fun1(a,b);
    printf("a=%d,b=a%d\n",a,b);
    fun2(&a,&b);
    printf("a=%d,b=%d",a,b);
}

 在这串代码中,fun1是传值变量,fun2是传址变量,正如上面所说:

fun1内部的代码叫做形参,它里面的东西不会影响到主函数内实参的改变,所以在输出时,a,b没有改变

fun2内部的代码直接把a,b的内存地址拿过来了,相当于fun2中的变量与主函数里面的变量建立了联系,在fun2里面做修改就会影响到主函数里面相对变量的值,所以我们在fun2里面把a,b交换后,主函数中的a,b也受到了影响。


题目

打印100~300之间的素数

素数: 一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫素数

#include
int fun(int i)
{
   


}
void main(){
	int i;
    for(i=100;i<=300;i++) {
        if (fun(i) == 1) {
            printf("%d ", i);
        }
    }
}

在写外部函数前,我们都应该先看一下主函数,然后根据主函数来理解外部函数中要让我们做什么

根据这个主函数我们可以知道,我们要在外部函数中判断100~300之间有哪些素数

首先,我们要用一个变量遍历一遍小于 i 的所有数,以此来看看有哪些数除了1和本身不能被其他自然数整除

遍历完之后,如果可以被其他自然数整除,那就return 0,否则,return 1。

具体代码如下:

int fun(int i)
{
    int a;
    for(a=2;a

判断是否为闰年

基础规律:非整百年能被4整除而不能被100整除。 这是最基本的判断闰年的方法。

完备原则:整百年能被400整除而不能被3200整除。 

#include
int fun(int i)
{
   


}
void main(){
	int i;
    for(i=1000;i<=2000;i++) {
        if (fun(i) == 1)
            printf("%d ", i);
    }
}

 通过主函数我们可以知道,外部函数是要判断是否为闰年

闰年的规则已经写在题目下方了,按照规则,我们可以得出这样一串代码

int fun(int i)
{
    if(i%4==0 && i%100!=0)
        return 1;
    else if(i%400==0)
        return 1;
    else
        return 0;
}

 这里整年和非整年要分别判断,所以我们要用到两个if

由于这里最高是2000,所以我在第二个if里面没有加上不等于3200这个条件 

你可能感兴趣的:(c语言)