c语言函数调用中的调用参数

数据结构与算法中的顺序表里面经常出现调用方法,有的在里面用&,有的用*,这是怎么区别

0

3个回答

&根据变量是取地址。*是根据指针求这个地址上存的值。
一般对普通变量用&得到指针,对指针变量用*得到地址。不能对非指针变量使用*,但是可以对指针变量再使用&,结果是地址的地址。
&出现在函数的参数中还有一个用处是,作为引用(这个不是C语言的语法,而是C++才有的)
具体参考:http://blog.sina.com.cn/s/blog_673ef8130100imsp.html

0

& 和直接 int a 表示传递引用和传递值,传递引用的话,那么传入的这个值本身会发生变化,传入值的话,那么传入的这个值本身不会发生变化
*表示传入的是指针,属于引用传递

0

引用相当于给你的变量娶一个别名,同一块内存不同的名称,而指针就是变量内存的首地址

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言的函数调用过程
C语言的函数调用过程先上一段代码#include<stdio.h> int Add(int x, int y) { int z = 0; z = x + y; return z; } #include <stdio.h> int main() { int a = 10; int b = 20; int c = Add(a, b...
C语言函数调用之可变参数列表
在C语言中,函数调用可以传参,也可以不传参,可以传一个参数,也可以传多个参数。今天我们来聊聊有关C语言中的可变参数列表。 先来看一段代码: #include<stdio.h> #include<stdlib.h> #include<stdarg.h> int Max(int n, ...) { va_list arg; int i...
C语言函数调用三种方式:传值调用,引用调用和传地址调用
我想,你只要看了C语言上关于传值函数调用的测试题,一切都会了然于胸: 1. 考题一:程序代码如下: void Exchg1(int x, int y)  { int tmp; tmp=x; x=y; y=tmp; printf(“x=%d,y=%d/n”,x,y) } void main() { int a=4,b=6; Exchg1 (a,b) ; printf(“a
C语言有参函数调用时参数间数据传递问题
C语言中在发生有参函数调用时,实参变量与形参变量之间的数据都是单向的“值传递”方式。包括指针变量和数组名作参数的情况。 C语言要求函数的实参要有确定的值,在函数调用时给形参分配相应的内存单元,同时将实参的“值”赋(复制)给形参,实现数据从实参到形参的传递(‘值传递’方式)。因为是复制,所以在操作副本(形参)过程中不会影响到原本(实参)内容。 首先,作为函数实参的量包括常量、变量和表达式
关于C语言函数调用汇编时参数大于4个的时候该如何传参
我们用一个简单的测试例子来说明 int fun(int a,int b,int c,int d,int e,int f,int g); //extern "C" int fun1(int a,int b,int c,int d,int e,int f,int g); int main() { int flm = fun(1,2,3,4,5,6,7); return 0; }
C语言函数调用常见问题(1)
在我看来 有许多计算问题如果通过函数调用方式来解决就会使得代码整体看起来简介又便于识别 但是在调用函数时候要注意以下几个问题 一、基本功能 1、函数调用,即把函数的输入值填进函数名后面的括号中,不需要注明函数类型 interchange(x, y);//无返回值 x = interchange(x, y);//返回值为 x 2、定义函数,此处重点注意: 1):无返回值时: void in...
c语言中多个函数作为另一个函数的参数时的调用顺序
//运行下面的代码#include int main() { f(f1(),f2(),f3()); return 0; }int f1() { int x = 4; printf("%d",x); return x; }; int f2() { int x = 5; printf("%d",x); return x; }; int f3() { int x =
函数调用时参数传递规则
ARM函数调用时参数传递规则 之前在学习如何在C语言中嵌入汇编时有了解到C语言之前的参数调用是使用寄存器 R0传递第一个参数, R1传递到第二个.. 一直到R3传递第四个参数. 但是 实际上有时可能传递的参数非常多,超过8个,或是参数中有浮点数之类,参数也会超过4个寄存器,对于超出的部份并不使用R4,而是使用堆栈的方式. 对于ARM体系来说,不同语言撰写的函数之间相互调用(mix ca...
C语言函数调用参数压栈的相关问题
参数入栈的顺序以前在面试中被人问到这样的问题,函数调用的时候,参数入栈的顺序是从左向右,还是从右向左。当时没有想清楚,随口就说从右向左。其实这个回答是不完全正确的。因为其实入栈的顺序,不同的体系架构是不一样的,举例来说, 看下面的代码:#include <stdio.h>int test(int a, int b) { printf("address of a %x.\n", &a);
如何在一个可变参数函数中调用另一个可变参数函数
之前看到论坛上有人问,如何在一个可变参数函数中调用另一个可变参数函数 ,其实一句话就可以搞定:#define debug_printf(fmt, ...) printf( fmt, ##__VA_ARGS__)
C语言中函数调用与返回值的关系是什么
而函数是负责要做什么 3); //调用函数 3我们称为形式参数 int sum(int arg1 并传递参数3和4过去 函数将计算机过程封装 也就可以说没有返回值|||函数调用和返回值的关系其实和赋值运算的道理是一样的只是 他就返回空 如果没有return语句 如果函数里有return后便那个值就是返回值 简单点说 其实就是c 这就是返回值类型 4);调用返回值:如
从汇编角度查看C语言函数调用约定
为了防止出现不必要的代码影响汇编语言的查看,所以程序中不使用任何库函数,以保持汇编代码的简洁。这里所使用的汇编是VC的MASM。默认函数调用方式__cdeclint add(int a, int b) { return a + b; }int main() { int a = 1, b = 2; return add(a,b); }对应汇编代码:; Listing gener
C语言学习总结:详解函数的调用过程
我们先看一段简单的代码: #include&amp;lt;stdio.h&amp;gt; int Add(int x, int y) { int z = 0; z = x+y; return z; } int main() { int a = 10; int b = 20; int ret = Add(a,b); printf(&quot;ret=%d\n&quot;,ret); return 0; } 我...
arm汇编程序调用C函数之参数传递
对于ARM体系来说,不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedure Call Standard),ATPCS主要是定义了函数呼叫时参数的传递规则以及如何从函数返回,在汇编程序中调用C函数的参数传递规则: ATPCS建议C函数的形参不超过4个,如果形参个数少于或等于4,则形参由R0,R1,R2,R3四个寄存器进行传递;若形参个数大于4
C语言/C++函数调用的三种参数传递方式
// 熟悉C++函数的三种参数传递方法:1传值(兼容C)。2传址(兼容C)。3传引用(C++特性)。 // 以下代码在VC++6.0里调试成功。 #include #include using std::string; using std::cout; using std::endl; void funSayHelloWorld(string s) //函数原型--参数以传值方式传递 { cou
C语言基础知识:C语言函数调用怎么返回两个值
在C语言中,函数只能返回一个值,要返回两个值,可以改换思路,通过其它方式做到。 1 建立数组,返回指针。 在要返回的两个值类型相同时,可以用创建数组的方式,将要返回的值存在数组中,并返回数组首地址,这样就可以实现返回两个值的效果。 需要注意的是,要返回数组首地址,那么返回的值不可以是局部变量,有如下几种是可以的: a) 使用静态局部变量存储,并返回地址; b) 使用全局变量存储,返回地址; c...
C语言中通过调用函数来修改实参值
#include&amp;lt;stdio.h&amp;gt; int fun(int x) { x=9; } int main(void) { int t=1; fun(t); printf(&quot;t = %d\n&quot;,t); }结果为 t = 1。怎样通过调用函数来修改实参值呢?方法1:用返回值的办法#include&amp;lt;stdio.h&amp;gt; int fun(int x) { ...
C函数不写return以及调用无参函数时传参会出现什么结果
1. 问题描述  偶然间重新拿起了三年前的C语言,遇到了以前没有遇到过的问题: 1. C语言中普通函数声明了返回类型但是不用return返回结果,也能够编译通过,如下:#include <stdio.h>int test1(int a) { return 10; } int test2(int a) {} int main() { int a = 1; test1(a);
C语言基础:函数的定义与调用
        在前面内容中我们调用了一个标准C的库函数,叫printf,那么如果我们想自己定义函数应该如何来编写程序呢?定义函数又有什么好处呢?因为我们在教材中提及到的例子主要目的是为了让读者对程序的原理有一定的了解,所以设定的例子程序通常都比较简单,基本上在几行到十几行,多一点的也就三五十行代而已,但是在真正的编程工作中,我们需要完成的代码将非常大,所以将代码合理的分为不同的区块是很有必要的,...
C语言再学习之:结构体引用为函数参数
结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析  [cpp] view plain copy struct stud   {       long int num;       float score;   };   /*结构体变量作为函数的参数,修改之后的成员值不能返回到主调函数*/
栈帧 - 理解C函数调用过程
每天进步一点点。 若萌新总结有误,望牛人不吝赐教。 >_ 在c程序中当计算机遇到某一个函数时,它就会跳转过去执行这个函数,执行完毕后接着再去执行下一条函数(指令)。在执行调用函数的过程中,计算机通常还要根据函数完成一些工作,比如数据的传递(形参拷贝、返回值)、内存的分配和释放、执行控制的转移,这些操作通过形成一个栈帧来完成。 栈帧是什么? 栈帧(stack  fra
从内存角度看C函数的调用过程
从内存的角度详细的分析C语言中的函数调用过程: 首先写一个测试用的代码: #include int add(int x, int y) { int z = 0; z = x + y; return z; } int main() { int a = 0, b = 0; int c = 0; c = add(a, b); return 0; } 这是一个简单的的求和函数。
静态分析C语言生成函数调用关系的利器——cflow
        除了《静态分析C语言生成函数调用关系的利器——calltree》一文中介绍的calltree,我们还可以借助cflow辅助我们阅读理解代码。(转载请指明出于breaksoftware的csdn博客)cflow的说明和安装        cflow是一款静态分析C语言代码的工具,通过它可以生成函数的调用关系。和calltree不一样,cflow有独立的网页介绍它(https://ww...
C语言之二维数组在函数中的调用问题
  之前在学习二维数组的时候感觉理解起来很简单,所以理解一下就过去了,但是当自己真正的去用二维数组数组解决一些问题(特别是在函数调用二维数组的过程中)才真正发现原来使用起来还是要去注意一些细节的。废话不多说,直接上干货!    一、函数调用二维数组           在函数中调用二维数组的具体格式如下:1、声明:这是声明的两种格式,在这里定义的是一个N*5的二维字符数组,各位看官一定要注意,在声...
C语言编程之函数调用规则
函数的调用规则多数情况下是不需要了解的。但是在跨语言和跨平台编程,比如DLL和COM编程时,就需要了解是怎么回事,因为这涉及到函数参数进出栈的顺序和清理工作。 例如:microsoft的vc默认的是__cdecl方式,而windows API则是__stdcall,如果用vc开发dll给其他语言用,则应该指定__stdcall方式。堆栈由谁清除这个很重要,如果是要写汇编函数给C调用,一定要小心堆
c语言中,结构体做参数调用例子结构体形参例子
c语言中,结构体做参数调用例子结构体形参例子 typedef struct AnyscanFtStr { int StrID; int StrFaceStart; int StrFaceEnd; void (*StrRender)(int x, int y); }ANYSCAN_FT_STRING, *ANY
多个函数 (自定义函数,函数的调用)(一)
1、编写一个程序,调用butler函数,生成以下输出: I will summon the butler function. you rang,sir? Yes.Bring me some tea and writeable DVDs. //two_func.c--一个文件中包含两个函数 #include void butler (void);/*ANSI/ISO C函数原型*/ in
C语言函数调用是怎么样一个过程?
大多数CPU上的程序实现使用栈来支持函数调用操作,栈被用来传递函数参数、存储返回信息、临时保存寄存器原有的值以备恢复以及用来存储局部变量。 函数调用操作所使用的栈部分叫做栈帧结构,每个函数调用都有属于自己的栈帧结构,栈帧结构由两个指针指定,帧指针(指向起始),栈指针(指向栈顶),函数对大多数数据的访问都是基于帧指针。 下面是结构图 栈指针和帧指针一般...
C语言函数参数的传值和传址调用
欢迎关注我的博客Zhuhao's Blog获取最新文章 大家都知道,c语言一般的参数都是传值调用的,但有时候也有例外,下面就分析一下什么时候传值调用,什么时候传址调用。 传值调用 标量参数都是传值调用,不会对标量产生任何影响 #include void add_one(int value) { value += 1; } int main(int argc, char const
ARM系统中函数调用过程中的参数传递
在嵌入式软件编程中,经常会用到函数调用,之前在学习如何在C语言中嵌入汇编时有了解到C语言之前的参数调用是使用寄存器R0传递第一个参数,R1传递到第二个..一直到R3传递第四个参数.但是实际上有时可能传递的参数非常多,超过8个,或是参数中有浮点数之类,参数也会超过4个寄存器,对于超
c语言中函数调用的过程
一.程序在内存中的占用。要学习C语言中函数调用的过程,必须要知道程序在内存中各个区域的分布。C语言的函数调用的过程主要分布在栈中,所以我们今天主要研究栈。二.几个基本的汇编指令。    从栈顶入栈称为push     从栈底出栈称为pop三.常用寄存器。    在CPU中:读取指令(内存--&amp;gt;CPU)--&amp;gt;分析指令(CPU)--&amp;gt;执行指令(CPU)      1.  EAX:累积...
c语言中函数的嵌套调用(关于函数声明的一个例子)
###########################例子全部来源于谭浩强版c语言################################ include &amp;lt;stdio.h&amp;gt; int main() { int max4(int a,int b,int c,int d); int a,b,c,d,max; printf(&quot;please input the four ...
c语言,函数作为传入参数传入另一个函数,,在传入的时候要写成指针形式,主函数再调用的时候不需要再写成指针形式,,,二分法求方程的根
#include&amp;lt;stdio.h&amp;gt; double f(double x) {     return 2 * x * x * x - 4 * x * x + 3 * x - 6; } double real_root(double (*fun)(double), double left, double right, double deviation) {     double x, ...
C语言函数和主函数的调用
在C语言中主函数在调用子函数时,会产生相应的栈去存放调用子函数时的值,当调用完毕时,调用子函数所生成的栈则立即销毁。主函数在调用子函数时如果为值传递时,则传过去的参数并不影响主函数中参数的值,如果采用地址传递,则在子函数时会改变参数地址所指向的值。 Note:1、在子函数中生成一个数组想要通过返回参数(指针变量)传回主函数时,实际上传不过去。因为子函数生成的数组在子函数所建立的栈中,当调用结束时
函数调用三种方式:传值&传引用&传指针
相关概念 c++三种传递参数方式 传参数的值(称值传递,简称传值),传参数的地址(称地址传递,简称为传址),和引用传递(称为传引用),相应的函数传值调用,传址调用和传引用调用 形参、实参  函数定义时参数表中的参数称为形式参数,简称形参;函数调用时参数表中的参数称为实际参数,简称实参。实参和形参之间的数据传递称为形实结合 说
不定参数函数调用不定参数函数
#include #include int myprintf(const char *fmt, ...) { int ret; va_list ap; va_start(ap, fmt); ret = vprintf(fmt, ap); va_end(ap); return ret; } void logv(const char *f
函数参数调用指针、结构体
一、函数调用指针时 void main(void) { int a,int b; a=5; b=3; fun(&a,&b); } void fun(*p1,*p2) { int c; c=*p1; *p1=*p2; *p2=c; } 1、此时函数声明参数是两个指针,因此主函数中函数的调用参数应该输入两个指针,就是a,b的地址。 2、再次强调,需要改变输入参数的值时函
c语言实现不定参数调用
不定参数调用实现:三个宏的使用va_arg()、va_start()和va_end() 上述的宏原型如下所示: C代码 收藏代码type va_arg(va_list argptr, type); void va_end(va_list argptr); void va_start(va_list argptr, last_parm); 它们都包含在头文件stdarg.h中.voi
C语言函数调用三种方式:传值调用,引用调用和传地址调用。
一.试题: 考题一:程序代码如下: void Exchg1(int x, int y) { int tmp; tmp=x; x=y; y=tmp; printf(“x=%d,y=%d/n”,x,y) } void main() { int a=4,b=6; Exchg1 ...
C语言中的函数调用和函数返回值
函数调用也就是主调函数使用被调函数,函数调用的一般形式为:函数名({实际参数表}) 对无参函数调用时则无实际参数表。 实际参数表中的参数可以是常数,变量或其他构造类型数据及表达式。 各实参之间用逗号分隔。 当在主调函数发生调用关系时 计算机会发生以下动作: 1、首先计算机自右至左依次求解主调函数实参的值。 2、系统给形参分配临时存储单元。 3、然后再自左至右把实参的值传给形参
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 python调用深度学习 大数据基础教学软件参数