c语言传参传地址,c语言传递地址

本文目录一览:

关于c语言形参实参传地址传数值的问题

C语言中函数的参数传递(值传递,地址传递,引用传递)

/* ^_^ 2015年11月3日09:58:03 辨析 C语言中函数的参数传递*/

//值传递 其实质是将数值传递给其他俩个变量,自己变量里面的值并没有改变—-所以说是值传递。

# include stdio.h

void exchange();

int main (void)

{

int x,y;

x=3;

y=4;

exchange(x,y); //这就是典型的值传递,它把X,Y的值传递给变a和b;

printf(“%d %d\n”,x,y); //a,b的值进行交换,但是变量X,Y里面的值并没有交换。

return 0;

}

void exchange(int a,int b)

{

int temp;

temp =a;

a=b;

b=temp;

printf(“%d %d\n”,a,b);

}

//地址传递 (提到地址二字,应该始终明确,C语言中的地址是基于指针的,所以地址传递是一定会用指针的)

# include stdio.h

void exchange();

int main (void)

{

int x,y;

x=3;

y=4;

exchange(x,y); //这就是典型的地址传递,它把X,Y变量地址传递给指针a和b;

printf(“%d %d\n”,x,y); //*a,*b的值进行交换,就是找到a,b对应的地址交换地址里面的值,其实也就是

//找到 a,b值进行交换。

return 0;

}

void exchange(int *a,int*b)

{

int temp;

temp =*a;

*a=*b;

*b=temp;

printf(“%d %d\n”,*a,*b);

}

c语言传值和传地址

输出:

调用函数前输出结果:

nums[1]=0

nums[2]=0

nums[3]=0

nums[4]=0

value = 0

因为循环变量初值是1,所以nums[0]不会输出

findMax(nums,value); //调用findMax,vals指向nums开始元素,m=0

i=1;[i=1],iMAXELS成立,开始循环,vals[i]=1,nums[0,1,0,0,0],输出:vals[1]=1

i++;[i=2],iMAXELS成立,继续循环,vals[i]=1,nums[0,1,1,0,0],输出:vals[2]=1

i++;[i=3],i5成立,继续循环,vals[i]=1,nums[0,1,1,1,0],输出:vals[3]=1

i++;[i=4],i5成立,继续循环,vals[i]=1,nums[0,1,1,1,1],输出:vals[4]=1

i++;[i=5],i5不成立,结束循环,输出:m=1

函数返回,m被舍弃,输出:

调用函数后输出结果:

nums[1]=1

nums[2]=1

nums[3]=1

nums[4]=1

value = 0

由于子程序中没有计算过m,所以m值一直是初始的1,这个m是函数自己临时定义的变量,用来接收调用者传进来的参数,main函数将vale的值0传递给m,计算完后,函数返回,m被舍弃,不会影响value的值(作为参数,是取value的值来用一下,然后就没有value的事了)

如果想将m的值返回,那么有两种办法:

函数写成:void findMax(int vals[],int *m),然后函数中用到m的地方都改成*m,调用时findMax(nums,value);

函数写成:int findMax(int vals[],int m),函数最后写return m;调用时value=findMax(nums,value);

  如果子程序不需要value作为m的初始值,则可省略第2个参数:int findMax(int vals[]),调用:value=findMax(nums);

c语言 传值和传地址

c语言中数组的实质就是指针,所以函数的参数是数组的话,就是传入了一个指针,也就是传入了一个地址。

主函数向findMax中传了两个参数,vals是传地址,m是传值,所以在findMax函数中,对vals做的改变可以带回到主函数,而对m的赋值却对主函数中的变量value没有任何影响

关于c语言的传值和传地址

编程中,很多东西要你自己去摸索,才能真正的理解。关于地址与值的问题,其实你自己可以试,把变量的地址输出来看看看是不是一样,比如 printf(“%x”,a); 这样就是以把变量a的地址用16进制的方式输出来,看看地址到底是怎么一回事。

传值与传地址可以这样理解:

就像我把我写的作文抄了一份给你,你拿去看了之后把有的地方改了,现在我要交作文,而我有一份,所以我直接交了,我交的作文内容并没有变,这就是传值,即值传递。

同理,如果我把我的作文直接给你,你看了后也把有些地方改了,现在我也要交,你只能还给我,我再交,这时我交的就是被你改过的了,这就是传地址,即引用传递。

这只是我的理解,有误的地方还请指正。

C语言数组的地址传递和值传递

1.值传递就不写了,顾名思义就是把当前的值传到下一个函数中,变量本身的没有发生任何变化

2.指针传递,把当前变量指针传到下一个函数,在另外函数里边修改指针的值会修改当前变量值

#include stdio.h

  void func(int *p){

                *p = 9;

                return;

    }

void swap(int *a, int *b){ //交换两个变量的值

        int temp = *a;

        *a = *b;

        *b = temp;

}

int main(void){

            int a = 0;

            func(a); //要修改一个变量,把他的地址传过去

            printf(“%d”,a);//9

            int b = 3;int c = 4;

            swap(b,c);

            return 0;

}

C语言传值传址的问题

首先是C语言的参数传递机制,比如下面这样的一个简单函数

int plus(int a,int b){

    return a+b;

}

//..

//其它函数中调用

z=plus(x,y);

这个函数调用的过程中会进行参数拷贝,也就是说上述代码会被编译成大致如下的样子(以下为伪代码)

int plus{

int a;int b;//函数的参数也是函数的内部变量

return a+b;

}

//…

//其它函数中调用

plus:a=x;//先将参数的值复制给被调用函数内部的参数

plus:b=y;//同上

z=plus()//执行函数

注意到上述过程中,所有函数的参数都是“复制”进去的,也就是说函数内部看见的参数并不是外部传入的参数本身,而是其副本,对副本进行操作(如交换)会失败,因为这些操作无法影响到外部的参数本身。

但如果使用指针传参,例如

void fun(int*a,int*b)//顺带一提,返回值一定要养成习惯写上

{int c;c=*a,*a=*b,*b=c}

//…

fun(x,y)

在编译的时候同样遵循参数复制原则,变成如下代码(以下为伪代码)

fun

{

int* a;int* b;//参数a,b仍然是函数的内部变量,不过其类型是int*

int c;c=*a,*a=*b,*b=c

}

//…

fun:a=x;//将x的地址复制给a

fun:b=y;//同上

fun();.//执行函数

可以看到,参数仍然是“复制”进去的,但要注意,传入的参数x与其参数副本a虽然是两个东西,但他们是指针,存储的地址一样,也就是指向的对象时一样的(都是x),y与b同理,因此在函数内部通过指针a,b寻址就可以访问函数外部的变量x,y,并对其进行交换操作

原创文章,作者:WHZT,如若转载,请注明出处:https://www.506064.com/n/135580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
WHZTWHZT
上一篇 2024-10-04 00:13
下一篇 2024-10-04 00:13

相关推荐

  • cmd看地址

    本文将从多个方面详细阐述cmd看地址,包括如何查看本机IP地址、如何查看路由器IP、如何查看DNS服务器IP等等。 一、查看本机IP地址 要查看本机IP地址,首先需要打开cmd窗口…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • 尚硅谷官网地址用法介绍

    尚硅谷是国内一家领先的技术培训机构,提供了众多IT职业的培训,包括Java、Python、大数据、前端、人工智能等方向。其官网地址为http://www.atguigu.com/。…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29
  • Python按位运算符和C语言

    本文将从多个方面详细阐述Python按位运算符和C语言的相关内容,并给出相应的代码示例。 一、概述 Python是一种动态的、面向对象的编程语言,其按位运算符是用于按位操作的运算符…

    编程 2025-04-29
  • Python语言由荷兰人为中心的全能编程开发工程师

    Python语言是一种高级语言,很多编程开发工程师都喜欢使用Python语言进行开发。Python语言的创始人是荷兰人Guido van Rossum,他在1989年圣诞节期间开始…

    编程 2025-04-28
  • Python语言设计基础第2版PDF

    Python语言设计基础第2版PDF是一本介绍Python编程语言的经典教材。本篇文章将从多个方面对该教材进行详细的阐述和介绍。 一、基础知识 本教材中介绍了Python编程语言的…

    编程 2025-04-28
  • Python语言实现人名最多数统计

    本文将从几个方面详细介绍Python语言实现人名最多数统计的方法和应用。 一、Python实现人名最多数统计的基础 1、首先,我们需要了解Python语言的一些基础知识,如列表、字…

    编程 2025-04-28

发表回复

登录后才能评论