C语言传形参
『壹』 c语言形参和实参是怎样传递数据的
我简单描述一下~c语言传递参数机构是这样的~非指针类的数据传递参数时传数值,指针类数据传递参数时传地址
(这里数组名也算指针)
比如
int max(int a,int b);
这时候如果调用这个函数max(x1,x2);仅仅将x1和x2的数值传递给函数max,a与x1占有不同的内存区域
int max(int *a,int *b);
这时候如果调用这个函数max(&x1,&x2);则将x1、x2的地址传递给a、b,a指向x1的地址,也就是说a可以操控x1的数值。
如果想具体了解可以参看谭浩强教授写的~c语言程序设计~很好很强大~
『贰』 c语言中,带参数的主函数,如何传递参数
/*argc 表示参数个数(包括命令本身),
argv[0]就是程序命令本身,
argv[1]就是第一专个参数
....*/
void main(int argc,char* argv)
{
...............
}
在命属令行窗口运行:
d:\>test.exe "abc def" "world"
argv[0]就是test.exe
argv[1]就是abc def
argv[2]就是world
如果没有空格的参数可以不用加引号
『叁』 关于C语言里实参和形参传递
voidfun(inta,intb){
intt;
t=a;
a=b;
b=t;
}
确实执行了操作,但是操作结果无法返回到main()函数,因此结果不变.
可通过指针传递地址,改正如下(但是我不太明白你的程序的意思):
#include<stdio.h>
voidfun(int*a,int*b)
{intt;
t=*a;*a=*b;*b=t;
}
main()
{intc[10]={1,2,3,4,5,6,7,8,9,0},i;
for(i=0;i<=10;i+=2)fun(&c[i],&c[i+1]);
for(i=0;i<10;i++)printf("%d",c[i]);
printf("
");
getch();
}
『肆』 关于C语言实参和形参传递问题。
1、数组作为函数参数时传递的是指向这个数组的指针的复制品(即 int *的复制品,指针的值与原来的相同);
2、你在函数sz(int *, int)里面利用复制得来的指针指向了原来的数组,并进行修改,因此这个地址上的值就被修改了(即,你通过int* a找到了数组的具体地址,并且进入该地址a[1],修改里面的值,所以原数组被改了);
『伍』 C语言中形参与实参怎么传递
我简单描述一下~c语言传递参数机构是这样的~非指针类的数据传递参数时传数值,指针类数据传递参数时传地址
(这里数组名也算指针)
比如
int
max(int
a,int
b);
这时候如果调用这个函数max(x1,x2);仅仅将x1和x2的数值传递给函数max,a与x1占有不同的内存区域
int
max(int
*a,int
*b);
这时候如果调用这个函数max(&x1,&x2);则将x1、x2的地址传递给a、b,a指向x1的地址,也就是说a可以操控x1的数值。
如果想具体了解可以参看谭浩强教授写的~c语言程序设计~很好很强大~
『陆』 c语言形参的值能不能传递给实参
形参和实参拥有分别的存储空间,即便是指针传递,改变的也只可能是这个指针变量所指向的内容,而不是指针变量本身的值,也即,如有指针变量p,那对实参的变化,有可能改变的也只是*p的值,而不是p本身的值。
『柒』 在C语言中,定义一个函数的形参和实参之间具体是如何进行参数传递的
传值调用和引用调用传值调用和引用调用指的是用于参数传递过程中的一种机制回。传值调用中,答只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。
形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者函数处理的结果作为形参。没有形参的函数在形参表的位置应该写void.main 函数也可以有形参和返回值,其形参也称为命令行参数,由操作系统在启动程序时初始化,其返回值传递给操作系统。
形参和实参的对照实例(C语言版)main(){int n;printf("input number \n");scanf("%d",&n);s(n);printf("n=%d\n",n);}int s(int n){int i;for(i=n-1;i>=1;i--)n=n+i;printf("n=%d\n",n);}
『捌』 C语言中的宏定义如何传递形参
给宏传递运行时计算的变量是绝无可能办到的。
不过假如只是这一个循环的话,可以利用预处理展开……
#defineREPEAT_0(f)f(0)
#defineREPEAT_1(f)REPEAT_0(f)f(1)
#defineREPEAT_2(f)REPEAT_1(f)f(2)
#defineREPEAT_3(f)REPEAT_2(f)f(3)
#defineREPEAT_4(f)REPEAT_3(f)f(4)
#defineREPEAT_5(f)REPEAT_4(f)f(5)
#defineREPEAT_6(f)REPEAT_5(f)f(6)
#defineREPEAT_7(f)REPEAT_6(f)f(7)
#defineREPEAT_8(f)ERROR_EXCEED_LIMIT
#defineREPEAT(n,f)REPEAT_##n(f)
/*用法如下*/
#defineLD(n)LEFT_BACK(n);Delay(4);
REPEAT(7,LD)
好处是这个宏是可以重用的,在别的地方也可以使用,并且不占运行时间。
『玖』 C语言中传入参数和传出参数的区别
传入参数一般按值传递,即函数中的修改不会反映到调用函数中来。
传出参数一般用按地内址传递的方式,此时容被调函数中的修改会反映到主函数中。
如果即是传入参数,又希望是按地址传递的方式(效率考虑),则前面用const修饰,作用:虽然是按地址传递方式,但在函数中不能修改其值)
『拾』 C语言中形参不能传递给实参的例子
#include "stdio.h"
void fun(int a,int b){
int c;
c=a;
a=b;
b=c;
printf("在函数中:a=%d,b=%d\n",a,b);//这里交换了.
}
void main(void){
int x=3,y=5;
fun(x,y);
printf("在调用处:x=%d,y=%d\n",x,y);//而这里仍是原样.
}
不知是不是你的意思……