⑴ c语言函数调用参数传递的是什么
C语言传递的是值而不是地址,这一点从VB转过来的程序员一定要注意。否则不经意间就会犯错误。另外下层函数修改上层函数变量不是一种好习惯,容易引发错误。C语言中函数可以返回一个函数值,如果你需要返回多个函数值可以用下面的形式
fun(int *a, int *b)
{ *a=1;*b=2;}
main()
{ int a, b;
fun(&a,&b) a,b的值被改变
}
如果按VB的习惯,
fun(int a, int b)
{ a=1;b=2;}
main()
{ int a, b;
fun(a,b);a、b的值没有改变
}
是错误的,main中的a,b和fun中的a,b完全是两码事,结果就是调运fun没有任何效果。
⑵ 怎么利用c++给TCL脚本中的过程传递参数,获取变量值
最简单可靠的办法就是C语言中把参数放到文件里,shell再从文件里读取。
还有:如果参数是单纯的整数,可以让C语言以返回错误代码的方式返回,shell再读取错误码。
⑶ c语言如何调用需传入参数的shell脚本
#include<stdio.h>
intmain(intargc,char**argv)
{
inti;
for(i=0;i<argc;i++)
printf("%s ",argv[i]);
return0;
}
比方这个程序叫 main.c 吧,先编译成 main.exe
gcc main.c -o main.exe
然后用命令运行
main.exe aefae 2423 asdae
程序输出:
main.exe
aefae
2423
asdae
argv 是通过命令行传送给程序的参数的字符串指针数组,argc 是参数的个数
⑷ C语言,参数处理的方式
C语言中函数参数的传递有:值传递、地址传递、引用传递这三种形式。
值传递:作为参数的变量,传递给函数执行后,自己的变量值是不变的。它(实参)仅仅只是把值赋给了形参,自己实际上是没有参与函数运算的,参与的是形参,这个就是参数的值传递。
地址传递:即采用指针方式,地址传递跟值传递没什么不同,值传递是把变量的值传递给形参去参与函数运算,而地址传递则把变量的地址传递给形参去参与函数运算。当然,如果函数改变了变量地址的值,实参的值也会变化的。
引用传递:引用传递的调用方式与值传递一样的,但形参则引用了实参,在函数里头操作的是实参,而不是像上面两种操作形参那样。传引用相当于给原来变量起了另一个名字而已,这样函数可以直接修改实参的值了。
⑸ C语言参数传递问题
哦,问得好。
主函数调用 max() 函数后,max() 函数里的变量的确会被销毁。为了解决这个问题,才会让函数有返回值,使用return语句就能将被销毁的z的值传递出去。
还有一种传递函数值的方法是使用指针。
⑹ C语言中实际参数和形式参数的设置及传递方式
C语言中实际参数(实参)与形式参数(形参)之间的传递方式有传值和传地址两种函数调用方式。
下面通过举例来说明实参和形参的设置方法以及传值与传地址的两种函数调用方式。
值传递方式:
#include<stdio.h>
voidfun(inta,intb)//此处a,b为形参
{
a++;
b++;
}
voidmian()
{
inta=1,b=2;
fun(a,b);//按传值方式调用函数fun,此处a,b为实参
printf("%d,%d ",a,b);//输出a=1,b=2
}
地址传递方式:
#include<stdio.h>
voidfun(int*a,int*b)
{
*a=4;
*b=5;
}
voidmian()
{
inta=1,b=2;
fun(&a,&b);//按传地址方式调用函数fun
printf("%d,%d ",a,b);//输出a=4,b=5
}
⑺ c语言函数调用时,参数是如何传递的
建立中间变量(形参),把实参值赋值给中间变量,当被调函数返回值时,系统释放掉中间变量。
在程序中通过对函数的调用来执行函数体,其过程与其它语言的子程序调用相似。对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。
函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例如:z=max(x,y)是一个赋值表达式,把max的返回值赋予变量z。
(7)c语言调用脚本传递敏感参数扩展阅读:
C语言中又规定在以下几种情况时可以省去主调函数中对被调函数的函数说明。
1、如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。例8.2的主函数中未对函数s作说明而直接调用即属此种情形。
2、当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。例如例8.1中,函数max的定义放在main 函数之前,因此可在main函数中省去对max函数的函数说明int max(int a,int b)。
3、如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。
⑻ C语言函数调用参数传递的是什么
分两种,一种是按值传递,一种是按地址传递,
按值传递就是在子函数中开辟出一个临时内存空间,将传递的数值保存在这个空间中,当子函数结束后,这个内存空间就会释放了!
按地址传递则是把主函数开辟的某个内存空间首地址传递给子函数,子函数可以直接读写主函数上这段内存空间,当子函数结束后,这部分空间不会被释放,主函数将继续使用这段空间!
⑼ C语言调用外置程序中怎么传递参数
system("rename
d:\0.txt
1.txt");
C语言字符串里你得写双反斜杠
⑽ C语言调用汇编程序时,使用哪些寄存器来传递参数
C语言与汇编语言混合编程应遵守的规则
ARM编程中使用的C语言是标准C语言,ARM的开发环境实际上就是嵌入了一个C语言的集成开发环境,只不过这个开发环境与ARM的硬件紧密相关。
在使用C语言时,要用到和汇编语言的混合编程。若汇编代码较为简洁,则可使用直接内嵌汇编的方法;否则要将汇编程序以文件的形式加入到项目中,按照ATPCS(ARM/Thumb过程调用标准,ARM/Thumb Procere Call Standard)的规定与C程序相互调用与访问。
在C程序和ARM汇编程序之间相互调用时必须遵守ATPCS规则。ATPCS规定了一些子程序间调用的基本规则,哪寄存器的使用规则,堆栈的使用规则和参数的传递规则等。
1)寄存器的使用规则
子程序之间通过寄存器r0~r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。此时r0~r3可记作A1~A4。
在子程序中,使用寄存器r4~r11保存局部变量。因此当进行子程序调用时要注意对这些寄存器的保存和恢复。此时r4~r11可记作V1~V8。
寄存器r12用于保存堆栈指针SP,当子程序返回时使用该寄存器出栈,记作IP。
寄存器r13用作堆栈指针,记作SP。寄存器r14称为链接寄存器,记作LR。该寄存器用于保存子程序的返回地址。
寄存器r15称为程序计数器,记作PC。
2)堆栈的使用规则
ATPCS规定堆栈采用满递减类型(FD,Full Descending),即堆栈通过减小存储器地址而向下增长,堆栈指针指向内含有效数据项的最低地址。
3)参数的传递规则
整数参数的前4个使用r0~r3传递,其他参数使用堆栈传递;浮点参数使用编号最小且能够满足需要的一组连续的FP寄存器传递参数。
子程序的返回结果为一个32位整数时,通过r0返回;返回结果为一个64位整数时,通过r0和r1返回;依此类推。结果为浮点数时,通过浮点运算部件的寄存器F0、D0或者S0返回。
2、汇编程序调用C程序的方法
汇编程序的书写要遵循ATPCS规则,以保证程序调用时参数正确传递。在汇编程序中调用C程序的方法为:首先在汇编程序中使用IMPORT伪指令事先声明将要调用的C语言函数;然后通过BL指令来调用C函数。
例如在一个C源文件中定义了如下求和函数:
int add(int x,int y){
return(x+y);
}
调用add()函数的汇编程序结构如下:
IMPORT add ;声明要调用的C函数
……
MOV r0,1
MOV r1,2
BL add ;调用C函数add
……
当进行函数调用时,使用r0和r1实现参数传递,返回结果由r0带回。函数调用结束后,r0的值变成3。
3、C程序调用汇编程序的方法
C程序调用汇编程序时,汇编程序的书写也要遵循ATPCS规则,以保证程序调用时参数正确传递。在C程序中调用汇编子程序的方法为:首先在汇编程序中使用EXPORT伪指令声明被调用的子程序,表示该子程序将在其他文件中被调用;然后在C程序中使用extern关键字声明要调用的汇编子程序为外部函数。
例如在一个汇编源文件中定义了如下求和函数:
EXPORT add ;声明add子程序将被外部函数调用
……
add ;求和子程序add
ADD r0,r0,r1
MOV pc,lr
……
在一个C程序的main()函数中对add汇编子程序进行了调用:
extern int add (int x,int y); //声明add为外部函数
void main(){
int a=1,b=2,c;
c=add(a,b); //调用add子程序
……
}
当main()函数调用add汇编子程序时,变量a、b的值会给了r0和r1,返回结果由r0带回,并赋值给变量c。函数调用结束后,变量c的值变成3。
4、C程序中内嵌汇编语句
在C语言中内嵌汇编语句可以实现一些高级语言不能实现或者不容易实现的功能。对于时间紧迫的功能也可以通过在C语言中内嵌汇编语句来实现。内嵌的汇编器支持大部分ARM指令和Thumb指令,但是不支持诸如直接修改PC实现跳转的底层功能,也不能直接引用C语言中的变量。
嵌入式汇编语句在形式上独立定义的函数体,其语法格式为:
__asm
{
指令[;指令]
……
[指令]
}
其中“__asm”为内嵌汇编语句的关键字,需要特别注意的是前面有两个下划线。指令之间用分号分隔,如果一条指令占据多行,除最后一行外都要使用连字符“\”。
5、基于ARM的C语言与汇编语言混合编程举例
下面给出了一个向串口不断发送0x55的例子:
该工程的启动代码使用汇编语言编写,向串口发送数据使用C语言实现,下面是启动代码的整体框架:
……
IMPORT Main
AREA Init,CODE,READONLY;
ENTRY
……
BL Main ;跳转到Main()函数处的C/C++程序
……
END ;标识汇编程序结束
下面是使用C语言编写的主函数:
#include "..\inc\config.h" //将有关硬件定义的头文件包含进来
unsigned char data; //定义全局变量
void main(void){
Target_Init(); //对目标板的硬件初始化
Delay(10); //延时
data=0x55; //给全局变量赋值
while(1) {
Uart_Printf("%x",data); //向串口送数
Delay(10);
}
}