C语言中,调用函数时,实参在函数里改变了值,那在主函数里是原来的值还是改变了的值呢?

作者&投稿:召服 (若有异议请与网页底部的电邮联系)
C语言调用函数后,为什么实参的值没有发生改变?~

你理解错了
函数里的实质是 实 参 复 制 形 参
你上面s(m)对于函数int s(int x)来说.
函数内部里只是把m的值1传给了x.然后x=2
x的值改变和m有什么关系呢

要想改变m的话可以这么改写函数
int s(int *p){ *p=2;}void main(){ int m=1; s(&m); printf("%d
",m);}区别在于
第二个用的是地址.虽然也是复制形参,
但是他们是复制的是 地 址.
所以这里s(&m) 使得 &m等于p
&m和p都是地址,
那么*p和m指的是同一个地址的值
所以*p=2本质也就是m=2

调用一个函数的时候,比如:


int func(int a,int b,int *c);
int main(){
int i1,i2,i3[12];

func(i1,i2,i3);

return 0;
}
调用func的时候,首先在函数func的区域内(就和main的区域一样,其他区域的操作不能访问main里面的变量)建立了3个变量:int a,int b;int *c。

随后,main里面作为参数的变量的值被复制到这几个变量中也就是:a=i1,b=i2,c=i3。

因为是复制值的缘故,a,b,c和i1,i2,i3仅仅在数值上相同以外,就没有关联了。

注意,这里的i3是一个数组的首地址,本身并不代表这个数组,在函数调用的时候,复制给c的是i3的值,也就是这个数组的首地址。

INT是值类型 变量存储的是真实的值 传参时在目标函数内再用一段内存把值复制过去,改的只是change函数里的变量a main函数里的没变

指针是引用类型 变量存储的只是一个内存地址 传过去的也是内存地址,修改的是根据那个地址 找到的真实值

void change(int* b)
{
*b=15;
}
这样就会改变
需要理解指针的定义。


在c语言中自定义了一个函数,在main中调用时提示找不到标识符,怎么...
把定义的函数放在,main函数之前即可。自定义的函数需要声明在调用之前,比如说在main函数里调用自定义的fun(),则fun()的方法体需要写在main函数之前。在C语言中的执行总是从main函数开始的,无论main函数在哪个位置都肯定从它开始。如果你定义的函数在main函数之后。而且在main函数前没有进行该调用函数...

C语言中什么时候被调用函数要用return来得到返回值,什么时候不用return...
一般引用一个需要一个返回值的函数时那个函数通常就用return返回所需要的值,还有一种情况就是函数接收的参数是数组或某个指针(其本质都是地址),此时就是直接对主调函数中的数据进行操作,不需要返回值的

C语言函数声明和调用读程序这个过程是怎么算的?
在程序中,函数声明和调用通常是分开的,函数声明一般放在头文件中或在程序的开头部分,而函数定义可以放在任何位置。在使用函数时,先进行函数声明,然后在需要时调用函数。例如,下面是一个简单的C语言程序,用于计算两个数的平均值:include <stdio.h> \/\/ 声明函数 double average(double x, double ...

C语言中调用函数指针占用哪里的存储空间,被调函数运行时内部变量存在...
在程序运行时,一个函数占用一段连续的内存。当调用一个函数时,实际上是跳转到函数的入口地址,执行函数体的代码,完成后返回。函数指针指向一个函数的入口地址,也就是函数存储空间的首地址。在C语言中,数组名代表数组的首地址,同样函数名代表了函数的首地址,因此在赋值时,直接将函数指针指向函数名...

C语言外部函数函数调用
在C语言中,函数的外部调用是通过在函数声明时使用关键字"extern"来实现的。当你在函数定义的首部,如:c extern int fun(int a, int b);这样标记,表明这个函数fun不是在当前文件内部定义的,而是作为一个外部函数,可供其他文件调用。C语言的规则指出,如果在定义函数时省略了"extern",默认情况下...

C语言中,函数定义和函数调用的区别是什么?
在C语言中,函数定义和函数调用是两个不同的概念。函数定义指的是编写函数体的过程,其中定义了函数的名称、参数列表、返回类型以及函数体内的实现代码。函数定义告诉编译器如何执行该函数。例如:int add(int a, int b) { return a + b;} 上面的代码定义了一个名为add的函数,它接受两个整型...

C语言中函数什么时候声明?什么时候定义?最好举例说明。
函数可以在调用函数的函数(比如main函数)之前定义,这样就无需声明了;举例:int add(int x,int y) { return x+y; } \/\/在编译程序编译到main的调用add之处时,由于已经编译过add的函数了,因此编译程序已经知晓调用规则,因此可以省略声明语句void main() { int x=5,y=6,c; c=add(x,y);...

请教C语言中调用系统函数时,为什么总是提示无法打开system.h 啊?_百 ...
先搜索一下,看有没有system.h,看它在哪个文件夹,查环境变量INCLUDE指向的路径.(1)有的编译器或这种C语言没有system.h (2)#include <system.h> 要用尖括号 (3)如果system.h 所在文件夹,不在环境变量INCLUDE指向的文件,而是它的下层,则要加上相对路径,例如<sys\/system.h>.这要根据你的具体情况...

c语言 void函数在main函数中使用的问题
声明void function(void) 括号中的void 是告诉编译器此函数没有参数,而调用时函数名后面的括号里放时的是参数,你这样去写,就相当前面说明了无参数,后面又给它一个参数,程序当然出出错了,另外调用时不写返回值的类型,因为在声明时已经写过了,这可能是编译器的规则,不知道你听明白了没?

c语言中 调用函数写在前面主程序写在后面的作用
是这样的,编译器在编译的时候,是从头开始的,你写在了前面,编译器就知道了你有这么一个函数,到后面执行到主函数里,等要调用函数的时候电脑就知道了,因为它之前已认识过你写的函数了 如果先写主函数,那么它先编译主函数,在执行到调用你的函数的时候,因为它还没找到你的函数,所以它不认识,...

崇信县19579457426: c语言 形参实参 -
策柔盐酸: 实参:调用的地方使用的变量,可以是变量,也可以是常量 形参:声明函数的地方或者直接写子函数代码的地方用的 如 int f(int m) //m是形参 {return m++; //这里m也是形参 } main() {int a=5,b,c;b=f(a); //这里a是实参c=f(3); //这...

崇信县19579457426: c语言,关于函数调用时实参如何传递给形参? -
策柔盐酸: 形参 相当于局部变量等效于 定义了 type xingcan=shican; 这样的变量定义后, xingcan和shican只是值相同 ,其它的没关系于是 当在函数里面对形参赋值 就不会影响实参了.

崇信县19579457426: c语言 形参 实参 详解 谢谢 -
策柔盐酸: 形式参数和实际参数 函数的参数分为形参和实参两种.在本小节中,进一步介绍形参、实参的特点和两者的关系.形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用.实参出现在主调函数中,进入被调函数后,实参变...

崇信县19579457426: C语言中,调用函数时,实参在函数里改变了值,那在主函数里是原来的值还是改变了的值呢? -
策柔盐酸: INT是值类型 变量存储的是真实的值 传参时在目标函数内再用一段内存把值复制过去,改的只是change函数里的变量a main函数里的没变 指针是引用类型 变量存储的只是一个内存地址 传过去的也是内存地址,修改的是根据那个地址 找到的真实值

崇信县19579457426: C语言函数中的形参和实参所指的是什么?调用和被调用又怎么理解呢?
策柔盐酸: 在主函数里的是实参,在子函数里的是形参.因为在真正执行的时候是把实参传递给形参来执行的,所以实参才是实际的参数. 比如: int jjj(int a, int b) void main() { int x, int y; jjj(x, y); } a、b是形参,x和y是实参. 而调用与被调用是相互的, int aa(){...} int bb(){...;aa();...}此时,bb函数调用了aa函数,即aa被bb函数调用.

崇信县19579457426: 在c语言中 调用函数时,形参与实参可以共用存储单元吗 -
策柔盐酸: 答案肯定的——形参和实参可以完全一样. 在程序执行的过程中,实参的作用域是主函数,只要程序没有停止,实参一直有效; 形参是定义函数是引入的参数,系统只在该函数被调用时分配临时内存,当自定义函数执行完后,用于临时储存形参的空间将被释放. 所以即使形参和实参的类型,名字完全一样,系统也能够把它们区分开.即可以完全一样. 注:解决这个疑问关键是要搞清楚变量作用域方面的内容.

崇信县19579457426: C语言问题 函数中形参若为普通变量,则调用时对应位置上的实参可以是指针吗 -
策柔盐酸: 额,你这个问题是这样的么?void fun(int x) {....}调用时,你是 int *p; fun(p);//用指针变量来做形参这是不对的,因为编译器虽然弱智,但是他能分清楚类型啊.你这样相当于耍了编译器,他会报错的,通不过去. 你就把编译器看成是很傻很...

崇信县19579457426: 在C语言中,什么是函数的行参和实参?他们分别有什么作用?分别出现在什么位置? -
策柔盐酸: 比如float fun(int i,int j);是函数原型声明,float fun(int,int);可以不写变量名,是形参; 然后x=fun(i,j);是函数调用,传递给他的是实参. 在下来float fun(int a,int b){……} 是函数定义,参数是形参.

崇信县19579457426: C语言中什么是形参,什么是实参? -
策柔盐酸: 参数传递主要用于模块化程序设计中.如果不了解参数传递是无法编写出正确的调用函数的.形参就是形式参数,用一个变量代表大家.实参就是实际参数,用一个 确切的数值代替形式参数,可以是表达式.实际参数与形式参数的参数个数、类...

崇信县19579457426: 在c语言中形参与实参是如何定义的 -
策柔盐酸: 在C语言中,形参即为形式参数.它在整个函数编译的时候,没有实际的数据赋于它,仅仅作于定义某个函数或者函数名.而实参既为实际参数.顾名思义,在函数中,有一个特定的数据赋值给它,可以作于在函数中进行运算.比如:void main(){int a=1,b;b=function(a); //a作于在函数中进行运算,是实参}int function(int c) //c作于定义function函数,是形参{}

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网