c语言函数传递

c语言函数传递,第1张

void traverse(void (visit)(link))的参数是visit,visit是一个指针,这个指针指向一个无返回值(void),有一个link类型参数的函数

显然print_item就是这样一个函数。

traverse(print_item);把这个函数的地址传给tranverse的参数visit注意函数名代表函数的入口地址,这个就好理解。

是,for(x,y)中参数是指针,也就是传递的地址原先x指向的内容是3, y指向的内容是2 。调用函数中,分别对应形参a,b,当然a,b也是地址。经过地址交换,分别指向另一个数,也就是x指向的内容是3, y指向的内容是2 。

#include <stdioh>

void max_fun(int a[],int n)

{

    int max = a[0];

    int i = 0;

    for (i = 1; i < n; i++)

    {

        if (a[i] > max)

        {

            max = a[i];

        }

    }

    printf("max=%d\n", max);

}

int main(void)

{

    int a[10];

    int i = 0;

    for (i = 0; i < 10; i++)

    {

        scanf("%d", &a[i]); // 输入10个整数

    }

    max_fun(a,10);

    return 0;

}

c语言中指针即地址,地址的传值可以引起参数的变化。

比如:

&x, &y是取这两个变量的地址,他们的作用空间在main函数里。然后函数调用把这两个变量的地址传递到函数myadd中,在函数中的a和b分别是引用地址指向的变量值,等于是取到了x,y本身的值。在myadd中直接 *** 作a可以改变x的值。

通俗来说因为&x,&y表示的是x,y的地址。所以传递的是地址。意思就是说,函数可以通过地址引用变量。

C语言在形参和实参之间传递的不仅是值传递,也包括地址传递的。

细节如下:

C语言函数参数传递包括按值传递和按地址传递两种;

当形式参数是数组、指针时都是使用的按地址传递。

值传递:不管怎么传,原来的实参的值都不会改变。

地址传递,原来的实参的值可能被改变。

打个比方:

值传递就好象你告诉别人你的帐户里有多少钱 帐户里的钱不会改变。

地址传递就好象你告诉别人你的帐户密码 帐户里面的钱可以被改变。

#include<stdioh>

point(char pt)

main()

{char b[4]={'m','n','o','p'},pt=b;

point(pt);

printf("%c\n",pt);

}

point(char p)

{p+=3;

p='F';}//加上这一句就变了

你这种传递是地址传递没错,形参p的值等于实参pt的值,但是你在调用函数里改变形参p的值,并不能改变实参pt的值,因为p和pt是两个不同的变量。

地址传递的目的,不是改变实参的值,而是通过改变p,达到改变pt的目的

之所以能通过改变p,改变pt的值,是因为p=pt,他们代表同一块内存地址。

总之一块内存空间有两个值,一个是地址p=pt=b,一个是存储的数据。

把地址传递给函数,在函数里通过这个地址,就能改变里面存储的数据'm','n','o','p'

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13493776.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存