**

C语言中函数参数传递的方式:值传递,地址传递

**

值传递:将实参的值复制至形参的相应存储单元中,实参与形参占用不同存储单元,单向传递
地址传递:使用数组名或者指针作为函数参数,传递的是该数组的首地址或指针的值,而形参接收到的是地址,即指向实参的存储单元,形参和实参占用相同的存储单元
引用传递:C++中
主要内容:1> c语言中地址传递实参的方法2> 多函数嵌套传递实参的方法,二维指针3> 数组作为函数参数,而不改变数组的值,可以复制数组内容再进行修改memcpy() 需要指定复制内容的长度,可以复制数组、结构体、类等strcpy() 针对字符串,有'\0'结束标记
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// C语言中没有引用传递void AddOwn(int *x)
{*x = *x + 100;
}void TransCapital_1(char *str)
{int len = strlen(str);                 // strlen函数原型int strlen(char *);传入参数为地址,可计算传入数组的字符个数printf("len = %d\n", len);       // 输出为5,字符的个数int size = sizeof(str);               //sizeofprintf("size = %d\n", size);     // 输出4,指针地址的大小for (int i = 0; i < strlen(str); i++){str[i] = str[i] - 32;}printf("TransCapital_1 = %s\n", str);
}//函数参数为数组,但不改变函数外部数组的值,需要将数组内容复制一份
void TransCapital_2(char str[])
{char str_[100];//memcpy需要指定复制内容的长度,可以复制数组、结构体、类等memcpy(str_, str, (strlen(str)+1)*sizeof(char));      //由于需要复制‘\0’所以需要在strlen后加1,避免str_乱码int len = strlen(str_);                 // strlen函数原型int strlen(char *);传入参数为地址,可计算传入数组的字符个数,‘\0’结束printf("len = %d\n", len);       // 输出为5,字符的个数int size = sizeof(str_);               //sizeof计算内存空间printf("size = %d\n", size);     // 输出100for (int i = 0; i < strlen(str_); i++){str_[i] = str_[i] - 32;}printf("TransCapital_2 = %s\n", str_);
}void swapRe(char **x, char **z)   //二维指针,x、y为指针的地址
{char *temp;temp = *x;*x = *z;*z = temp;
}void swap(char **x, char **y, char **z)   //二维指针,x、y为指针的地址
{int len = strlen(*x);                 // strlen函数原型int strlen(char *);传入参数为地址printf("len = %d\n", len);       // 输出为6,字符的个数//交换x与ychar *temp;temp = *x;            *x = *y;*y = temp;//交换y与zswapRe(y, z);         // 函数中的函数继续传递实参printf("\n");
}int main()
{//简单的地址传递int a = 1;AddOwn(&a);printf("a=%d\n", a);printf("\n");//数组如何作为实参传递,改变外部数组的值char s[10] = {"hello"};  TransCapital_1(s);          //数组名作为函数的参数,传递数组的地址,形参和实参共同占用一段内存puts(s);printf("\n");//数组作为函数参数,但不改变外部数组的值char s2[10] = { "hello" };TransCapital_2(s2);          //数组名作为函数的参数,传递数组的地址,形参和实参共同占用一段内存puts(s2);printf("\n");char *ap = "AAAAAA";     char *bp = "BBBBBB";char *cp = "CCCCCC";swap(&ap, &bp, &cp);           //传递指针地址,传实参puts(ap);puts(bp);puts(cp);system("pause");
}
//***********输出结果***************
a=101len = 5
size = 4
TransCapital_1 = HELLO
HELLOlen = 5
size = 100
TransCapital_2 = HELLO
hellolen = 6BBBBBB
CCCCCC
AAAAAA
请按任意键继续. . .

C语言中函数参数传递的方式:值传递,地址传递相关推荐

  1. C语言中函数参数传递

    C语言中函数参数传递的三种方式 (1)值传递,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值. (2)地址传递,就是 ...

  2. c/c++语言中函数参数传递的三种方式——徐吉平

    此篇为本人处女作,希望大家多多指正 1.这是c/c++中的函数传值方式,函数中只交换了 形参x,y的数值,而实参a,b的值并没有发生变化 #include <stdio.h> void m ...

  3. 项目1- C/C++语言中函数参数传递的三种方式

    <span style="font-size:18px;">问题及代码:</span> <span style="font-size:18p ...

  4. 第2周项目1c++语言中函数参数传递的三种方式

    copyright (t) 2017,烟台大学计算机学院*All rights reserved.*文件名称:1.cpp*作者:邵雪源*完成日期:2017年9月7日*版本号:v1.0 */ #incl ...

  5. C语言中函数的调用和函数返回值(17)

    C语言中函数的调用和函数返回值 一.函数的调用形式 按照函数调用出现的形式,可以分为三种调用方式: 1.函数调用语句 例如: printf_star(); 2.函数表达式 c=2*max(a,b); ...

  6. 在C语言中以编程的方式获取函数名

    在C语言中以编程的方式获取函数名 仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧. 对象反射库.调试工具及 ...

  7. 决定c++语言中函数的返回值类型的是,全国2009年10月高等教育自学考试C++程序设计试题及部分参考答案...

    全国2009年10月高等教育自学考试 C++程序设计试题 课程代码:04737 一.单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码 ...

  8. C语言中函数和指针的参数传递

    最近写二叉树的数据结构实验,想用一个没有返回值的函数来创建一个树,发现这个树就是建立不起来,那么我就用这个例子讨论一下c语言中指针作为形参的函数中传递中隐藏的东西. 大家知道C++中有引用的概念,两个 ...

  9. 在c语言中 函数的作用是什么,C语言程序中函数的定义

    C语言程序中函数的定义 C语言的函数问题是困扰很多学者的问题的,c程序中什么是函数呢?下面啦小编为大家精心推荐的c程序中函数的定义,希望能够对您有所帮助. C语言读书笔记--函数 先来看看函数的一般形 ...

最新文章

  1. 使用yum安装gitlab
  2. JC法在matlab,自贡自流井启闭机--四川闸门厂家产品中心
  3. php图形界面框架,python GUI 图形化界面框架的选择
  4. python微服务监控_如何用zabbix监控微服务
  5. 第三次学JAVA再学不好就吃翔(part92)--Map集合的遍历
  6. yolo yolov2_PP-YOLO超越YOLOv4 —对象检测的进步
  7. BZOJ1562: [NOI2009]变换序列(二分图 匈牙利)
  8. 显示客户端接收什么服务器,什么是显示服务器,用来做什么?
  9. [ZJOI2006]物流运输
  10. jquery 时间相减获取天数_JQuery Datepicker实现JavaScript日期相减的小例子
  11. python编写登录脚本_python实现的登录和操作开心网脚本分享
  12. URAL 1741 Communication Fiend
  13. vue 封装图片预览组件
  14. 大数据专业未来就业前景如何?
  15. mysql内存会持续上涨,每天增加一点,一直到100%
  16. 利用棋盘格进行相机标定
  17. 万圣节 数据_万圣节最可怕的12种开发商恐惧
  18. 微信小程序实现简单定位功能
  19. numpy中的ndarray方法和属性
  20. java邮箱发送验证码_java实现发送邮箱验证码——三步搞定java邮箱发送验证码

热门文章

  1. 盘点3种生涯的决策类型和方法,看看你是哪种类型?|【生涯荐读】
  2. 软考高级系统架构师是什么来头?考上了就能当架构师了吗
  3. js两只手指控制div图片放大缩小功能(2)
  4. OS X El Capitan 10.11开启性能模式
  5. (三)计算机视觉 --SIFT特征匹配、地理标记图像匹配及RANSAC图像拼接
  6. Matlab工具箱标定和校正鱼眼镜头
  7. 多项式除以多项式例题讲解_多项式乘以多项式训练题.doc
  8. 高数笔记(九):不定积分,分部积分法,有理函数的积分
  9. 基于ARM的智能灯光控制系统总结(3-主程序及全局数据结构)
  10. Scaner VS bufferedReader