c语言的函数传进去的什么时候是值什么时候是地址

比如说f()
struct {} a;
int a;
int a[8];
等等
我用f(b)(b为形参)在函数里面进行一系列的操作
到底什么时候a的值会改变什么时候不会改变。
另外再问下
C程序函数的形参不可以说明为static型变量 对吗,为什么

第1个回答  推荐于2016-05-03
光说C语言不说C++
只有你传进去的是指向a的指针,才有可能在f返回后a的值发生改变。

形参的值取决于实参,相当于复制了实参的值的一个临时变量,用static也不会保留上次的值。本回答被提问者采纳
第2个回答  2014-08-28
fun(b),传进入的b, 在fun函数中会拷贝一个形参b的副本,fun函数结束就没了。
fun(&b),传参时,使用引用,或者指针。传入的是地址,就可以再fun函数中改变b的值
第3个回答  2014-08-28
加&就是地址 不加就是参数的副本

C语言函数调用中怎么判断是地址传递还是值传递
2 传地址:void func(char **a);同样是char *类型的参数,有可能是传值,也有可能是传地址。具体取决于函数实现功能。

C语言的传值和传址的区别
1、在传值中函数参数压栈的是参数的副本,任何的修改是在副本上作用,没有作用在原来的变量上。2、传址中压栈的是指针变量的副本,当你对指针解指针操作时,其值是指向原来的那个变量,所以对原来变量操作。

C语言中的值传递和址传递.
都是值传递,真正的引用传递是出现在C#中,当你传指针的时候,实际上你传的是指针所指向的地址值,也就是把地址值传过去,但是这个地址值也是通过值传递过去的,即函数内的指针指向的地址值是原来的地址值的一个拷贝,但是由于地址值相同,所以你在函数内对该指针进行解指针并进行修改,你也修改了外部...

C语言的函数调用中怎样判断是地址传递还是值传递?
int,char,float,结构体,枚举,联合均为值传递;数组名,指针,引用均为地址传递;比如 func(int,char,float,struct S)值传递 func(int *,int a[],int &a)地址传递

C语言,参数处理的方式
C语言中函数参数的传递有:值传递、地址传递、引用传递这三种形式。值传递:作为参数的变量,传递给函数执行后,自己的变量值是不变的。它(实参)仅仅只是把值赋给了形参,自己实际上是没有参与函数运算的,参与的是形参,这个就是参数的值传递。地址传递:即采用指针方式,地址传递跟值传递没什么不同...

c语言的一个函数原型int A(int x, int *y , &Z),求这三个入参的解释...
简单通俗来说就是 第一个是复制一份传进去,函数内改变不影响原始值。(值传递)第二个传进去是一个指向int的指针,之后的操作按指针计。(地址传递)第三个是直接传递,函数内改变也会改变原始值。(引用传递)最后,不要评论,追问几次又不怎么滴,评论我这里可是没有提示的,多会看见我可说不准...

在c语言中给一个变量赋值与赋地址的区别
只是另一个变量的值和传递的变量值是相同的。而地址传递是直接把变量的地址传递给函数,这时函数是直接对原来的变量进行操作的。所以值会变化。举例:值传递就相当于克隆了一个同样的变量,操作的是克隆出来的那个,原来的变量没有变化,但是地址传递是直接对原来的变量进行操作,没有克隆新的变量。

c语言中,什么是函数的地址
程序运行的时候就会把函数中的语句调用到内存中去,那么函数代码在内存中开始的那个内存空间的地址就是函数的地址!至于函数中用的变量的地址并不是放在代码区的,一般都放在另外的两个地方,其实地址上是有很大的差值的 希望你能理解上面的内容,祝愿你学习C语言能马到成功!

C语言传值不能传地址吗?
不对,在C语言中,传值有地址传值和参数传值,参数传值只能将实参传值给形参,所以A选项正确。C语言中的外部变量是可以在函数之间传递数据的。C语言中的自动变量是默认的变量,实际上是函数中的局部变量,所以D选项正确。全局变量一经定义都是需要分配内存单元,在程序运行过程中自始至终都会占用固定的...

c语言printf函数运算顺序为什么从右到左
&i(即地址)所指向的变量 (&i)即 i。如果这个参数为 i,那么你只能通过 d 知道类型,但不知道把控制台取过来得值放在内存中哪里,即无法改变第二个输入参数 i。printf 是取值来输出,那么自然不用关心地址了。如 printf("%d",i)对于 d,i 传进去后在函数内部建立了一个副本,只用于输出,...

相似回答