您的位置:

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,并对其进行交换操作

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

2023-01-07
c语言里的传地址引用问题,c语言传地址和传值

本文目录一览: 1、C语言里的传地址引用问题 2、C语言数据结构中地址传递问题。 3、C语言 传值 传址 传引用 C语言里的传地址引用问题 c语言参数是不能改变的,这是基本规则。试图改变变量地址值,是

2023-12-08
c语言里的传地址引用问题,c语言传地址和传值

本文目录一览: 1、C语言里的传地址引用问题 2、C语言数据结构中地址传递问题。 3、C语言 传值 传址 传引用 C语言里的传地址引用问题 c语言参数是不能改变的,这是基本规则。试图改变变量地址值,是

2023-12-08
c语言数值传参,c语言的参数传递

2023-01-08
c语言中的地址符,c语言的地址符号

2022-11-26
c语言中的传值,C语言传值

2023-01-08
c语言隐式传参,c语言指针传参和引用传参

2022-11-24
以下关于c语言函数参数传递方式,以下关于c语言函数参数传递方

2023-01-07
c语言变参传递,c语言变参函数怎么传递

2022-11-28
c语言数首地址,c语言地址+1

2023-01-04
c语言函数传空,C语言空语句

2023-01-04
c语言二维数组怎么传递参数,二维数组如何传递参数

2022-11-28
c语言地址编号,c语言定义地址

2023-01-06
c语言笔记讲解,c语言程序笔记

2022-11-23
c语言用全局变量还是传参,c语言全局变量

2022-11-30
c语言复习地址的简单介绍

2022-11-27
c语言scanf地址,C语言scanf

2022-12-02
处理c语言,C语言,语句

2022-11-23
c语言调用数组实参,C语言数组形参

2023-01-08
c语言中的arm,C语言中的实参和形参

2022-11-29