C/C++函数调用与函数返回值

函数参数与函数调用

1、函数调用的作用:

·用实参数向形式参数传递数据;

·为获得数据参数及在函数体中声明的变量分配存储空间;

·中断现行(调用)函数,把流程向被调用函数的入口处,开始执行被调函数。

当参数表为空时,表示该函数不从调用函数接受数据。

2、数值参数

传值调用:形参只有在函数被调用时,才被分配内存区域,并一直保留到函数返回时被撤销为止。形参和实参只是名字相同,各自占有各自的内存空间和生存周期,因此他并不能改变主调函数中的变量。

3、地址参数

传址调用:传送的是变量的地址,尽管主函数和被调函数各自在自己的变量上操作,但他们的地址是一样,所以被调函数可以改变调用函数中变量的值。

返回指针的函数

在C语言中,函数的返回类型可以是除数组和函数以外的任何类型,包括返回一个指针类型的数据。

例子1:// 查找字符串中指定字符的原函数

extern char *strchr(char *str,char character)
{
while(*str!=character)
str++;
return(str);
}
··

注意... 与传址调用不同,返回指针的函数是以传值方式向调用函数返回数据的。因此不可用 自动变量的地址 作为返回值,因为这类变量在返回时将被撤销。而全局变量又用不着返回地址。因此,返回的地址变量应是局部变量的或者动态的。

例子2://错误的 得到的是乱码

char *strchr(char *str,char character)
{
char* substr;
substr[0]=str[0];
return substr;
}

时间: 2024-08-07 20:19:30

C/C++函数调用与函数返回值的相关文章

js jax 函数-js中Ajax返回的值怎么当函数返回值供别的函数调用?

问题描述 js中Ajax返回的值怎么当函数返回值供别的函数调用? 如上图代码 我调用时返回的是undefined 解决方案 改为同步,而且你的回调里面返回值没用,并不是你的getTotalIntegral的返回值,还有以后代码,不要发截图.看桌就烦 function getTotalIntegral(){ //...原来的代码 var rst=false; $.ajax({ async:false,/////////////同步 success:function(data){ if(data.s

函数调用-c语言中函数返回值类型的问题

问题描述 c语言中函数返回值类型的问题 看一道改错题: #include #include #include proc(int k)//很显然根据主调函数和返回值类型知道这里缺少类型 { int n;float s,w,p,q; n=1; s=1.0; while(n<=k){ w=2.0*n; p=w-1.0; q=w+1.0; s=s*w*w/p/q; n++; } return s; } void main(){ system("CLS"); printf("%f

函数返回值是否使用引用类型的问题:理解引用、返回值

在<对象更有用的玻璃罩--常引用>一文中,介绍了对象作为函数的参数时,推荐使用引用的形式.并且,如果实际参数的值不允许改变时,声明为常引用更佳. 在<第8周-任务1-方案3-复数类中运算符重载(与实数运算)>中,又讨论了一个问题,结论是:在类似复数加法运算符重载这样的函数,形式参数用作为常引用最佳,如: friend Complex operator + (const Complex &c, const double &d); friend Complex oper

c++函数返回值是数组问题

问题描述 c++函数返回值是数组问题 比如现在要求定义一个函数fun(),在主函数调用时直接用fun():就能输出在fun函数里定义好的一个字符串,那要fun函数的返回值怎么返回才行,为什么我返回指针但打印出来却不是正确结果?求大神解释 解决方案 一般来说,出于内存管理的需要,让主程序来分配内存,传指针.比如scanf函数,就是通过这个方式输入值. 比如 void getstr(char * buffer) { char str[] = "hello world"; strcpy(bu

谨防数组函数返回值造成的内存泄露

数组作为函数返回值时,非常容易引起内存泄露. 问题现象:Build应用程序后,提示非法内存访问:可是Compile应用程序却没有这个问题. 问题思考:函数返回值,在被调用函数中负责释放:局部变量也是在函数调用结束后在函数内被释放.如果一个函数调用了另外一个函数,却没有使用被调用函数的返回值,就有可能造成内存泄露.   //数组作为函数返回值 function StrToPByte(Const str: string;Var arrByte: array of byte): PByte;var 

数据库内核月报 - 2015 / 09-PgSQL · 答疑解惑 · 诡异的函数返回值

背景 修改PG源码时,在elog.c文件中准备调用timestamp.c中的TimestampTz GetCurrentTimestamp(void),以获取当前时间,TimestampTz是个int64类型,但是返回值类型不是期望的(是个int32值),但是在另外一个文件postgres.c调用返回的是正常的,如下: elog.c: GetCurrentTimestamp() = 3891376011 postgres.c: GetCurrentTimestamp() = 4956216434

C语言 用指针作为函数返回值详解_C 语言

C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数.下面的例子定义了一个函数 strlong(),用来返回两个字符串中较长的一个: #include <stdio.h> #include <string.h> char *strlong(char *str1, char *str2){ if(strlen(str1) >= strlen(str2)){ return str1; }else{ return str2; } } int main(){ cha

c++-在写函数时 是不是要把返回值都放在形参表里?把函数返回值设定为true/false?

问题描述 在写函数时 是不是要把返回值都放在形参表里?把函数返回值设定为true/false? 在写函数时 是不是要把返回值都放在形参表里?把函数返回值设定为true/false? 解决方案 主要还是看程序需要把,这种想法只是对于一些内存申请操作来说,函数在结束后就将函数内申请的控件释放.如果已经在外部申请好了内存,是可以当做返回值返回的.所以说并不一定就要把返回值放在形参表里. 解决方案二: 这也是一种方式,尤其对于要返回多个结果的时候,一般通过参数来传递结果.然后函数返回值来表示函数是否调用

Python函数返回值实例分析

  本文实例讲述了Python的函数返回值用法.分享给大家供大家参考.具体分析如下: 最近学一些Python的基本用法,看到定义函数,发现似乎只能返回一个返回值,想想matlab里返回多个返回值多方便啊,网上查了查,看到有返回多个值的方法. python 函数返回值有两种形式: 1 返回一个值. 2 返回多个值. 现看看返回一个值的吧. ? 1 2 3 4 def firstvalue(a,b): c = a + b return c print firstvalue(1,2) #结果:3 再看