#include<stdio.h>
void f2(int n){
n++;
printf("\nf2 中的n=%d",n);
}
void main(){
int n =9;
f2(n);
printf("\nmain 函数中 n=%d",n);
getchar();
}
# include <stdio.h>
double price =200.0;
void test01(){
printf ("%.2f \n ", price );
}
void test02(){
price =250.0;
printf ("%.2f \n ", price );
}
void main (){
printf (" main price =%.2f \n ", price );
test01();
test02();
test01();
getchar();
}
第一段代码,n 是各个函数里的局部变量,它的作用域仅限在各函数体内,因此在void f2(int n) 对 n++只在函数内作用,所以这里输出 10,但在主函数里 n 的值仍然没有被改变,仍为 9。
第二段代码,double price =200.0; 定义在程序开始,是个全局变量,它的作用域从定义它的那行开始向下全域有用,只要不在各个函数里定义和它同名的局部变量。如果在某个函数里定义的局部变量名和全局变量名同名,则在这个函数里起作用的就是局部变量,全局变量被屏蔽了。
你知道什么是值传递和指针传递吗?
第一个代码中,变量n的值不会被改变是因为在函数Facl中,使用的是传值调用(pass by value)的方式。在该方式下,函数参数是形参,会创建一个新的内存空间来存储参数的值,并且在函数调用结束后会被销毁,不会改变原始变量的值。所以在函数Facl中对n的改变不会影响到main函数中的n。
第二个代码中,变量prince的值会被改变是因为在函数中使用的是传引用调用(pass by reference)的方式。在该方式下,函数参数是实参的引用,传递的是变量的内存地址。因此,在函数中对实参的修改会直接修改原始变量的值。所以在函数中对prince的改变会影响到main函数中的prince。
要解决第一个代码中变量n不会被改变的问题,可以考虑使用指针作为参数。具体步骤如下:
c void Facl(int *n) { if (*n <= 1) { return; } else { *n = *n * Facl(*n - 1); } }
&
运算符取得其地址:c int n = 0; scanf("%d", &n);
c Facl(&n);
c printf("%d", n);
这样就可以改变第一个代码中的变量n的值了。
请注意,这里将函数Facl的返回值改为void类型,因为已经通过指针修改了变量n的值,所以无需再返回修改后的值。
第一个是值传递
第二个是全局变量
第一个代码是一个函数值增加1的过程
第二个代码是全局,而且是先输出的price,再对它进行赋值
我还是一名小学生,能先点个采纳吗,实在不懂,我再教你。