c语言字符串做为函数参数传递,c语言:字符串做为函数参数传递
1、值传递
void swap(int x,int y)
{ int temp = x;
x = y;
y = temp;
}void main()
{
int a = 10, b = 20;
swap(a, b);
}
执行后,并不会交换。
2、引用传递
void swap(int &x,int &y)
{ int temp = x;
x = y;
y = temp;
}void main()
{
int a = 10, b = 20;
swap(a, b);
printf("a=%d\nb=%d\n", a, b);
}
执行后,发生交换。
3、指针传递
void swap(int *x,int *y)
{ int temp = *x; *x = *y; *y = temp;
}void main()
{
int a = 10, b = 20;
swap(&a, &b);
printf("a=%d\nb=%d\n", a, b);
}
执行后,发生交换。
参数传递只有上面三种,但是如果加上数组,就会产生几种新形式。
首先,明确数组型变量名本身只是该数组所占存储空间的首地址:
int a[3] = { 1, 2, 3 }; int *p = a; //等价于下行 //int *p = &a[0];
printf("%d", *p);
典型的数组做参数。
void fun(char s[]){ for (int i = 0; s[i] != '\0'; i++)
printf("%c", s[i]);
}void main()
{ char str[] = "Hello World!";
fun(str);
}
函数调用时,这里系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间,此后,将实参数组的首地址传递给形参变量。
其实本质与下相同,只不过还是数组形式的(数组名代替指针)。
既然数组型变量名本身只是该数组所占存储空间的首地址,我们当然可以用指针做形参来接收数组实参。
void fun(char *p){ while (*p)
{
printf("%c", *p);
p++;
}
}void main()
{ char str[] = "Hello World!";
fun(str);
}
不过问题是如果这样,无法把握数组结束(除非知道数组长度)。而对于字符数组(上例),由于字符串末尾有结束标志'\0'(ascii码正好是0),所以就很容易利用指针来判断字符串是否结束。
扩展资料:
调用带参数的函数:
在调用函数时,可以向其传递值,这些值被称为参数。
这些参数可以在函数中使用。
可以发送任意多的参数,由逗号 (,) 分隔:
myFunction(argument1,argument2)。
当声明函数时,请把参数作为变量来声明:
function myFunction(var1,var2){这里是要执行的代码}。
变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。
按值传递参数:
按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。
按值传递参数时,需要在参数名前加"ByVal"关键字。
按地址传递参数:
按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。
如果实参是一个常数或表达式,Visual Basic 6.0会按"传值"方式来处理,按地址传递不需要"ByVal"关键字。
按数组传递参数:
在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组参数在传递时应注意以下两个方面:
① 在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔。
② 被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界。
c语言字符串做为函数参数传递,c语言:字符串做为函数参数传递相关推荐
- c语言中用于获取字符串长度的函数是,C语言中求字符串长度的函数的几种实现方法...
C语言中求字符串长度的函数的几种实现方法 1.最常用的方法是创建一个计数器,判断是否遇到'\0',不是'\0'指针就往后加一. int my_strlen(const char *str) { ass ...
- c语言中有裁剪字符串的函数吗,C语言中的字符串截取函数
/*======================================================== 子数整数 源程序名 num.??? (pas,c,cpp) 可执行文件名 num. ...
- c语言函数参数类型检查,内联函数在编译时是否做参数类型检查?
先说宏和函数的区别: 1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型. 2. 宏的参数替换是不经计算而直接处 ...
- C语言用函数字符串的查找,字符串查找函数,C语言字符串查找函数详解
在对 C 语言的编程实践中,字符串查找是最频繁的字符串操作之一,本节就对常用的字符串查找函数做一个简单的总结. 使用 strchr 与 strrchr 函数查找单个字符如果需要对字符串中的单个字符进行 ...
- Go语言实践[回顾]教程23--详解Go语言函数的声明、变参、参数传递
Go语言实践[回顾]教程23--详解Go语言函数的声明.变参.参数传递 函数的声明(定义) 函数的基本声明格式与调用 函数的变参(不定参) 值传递还是引用地址传递 函数是 Go 语言源代码的基本构 ...
- c语言tchar头文件,c – 什么是TCHAR字符串和Win32 API函数的“A...
首先我要说的是,最好不要将TCHAR用于新的Windows项目,而应直接使用Unicode.关于实际答案: 字符集 我们需要了解的第一件事是字符集在Visual Studio中的工作原理.项目属性页面 ...
- c语言如何将字符转换为数字,C语言中一些将字符串转换为数字的函数小结
C语言atoi()函数:将字符串转换成int(整数)头文件: #include atoi() 函数用来将字符串转换成整数(int),其原型为: int atoi (const char * str); ...
- ACMNO.40 C语言-子串 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串
题目描述 有一字符串,包含n个字符. 写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串. 输入 数字n 一行字符串 数字m 输出 从m开始的子串 样例输入 6 abcdef 3 样 ...
- c语言中存储字符用什么函数,那些C语言中你不知道的字符串函数(坑)
1.strcpy() 在字符串拷贝函数中,它的函数编写不难,如下 char* Strcpy(char* dest, const char* src) { assert(dest != NULL &am ...
- R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项)、randomSequence函数创建不含重复项的随机序列数据集、创建随机字符串
R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项).randomSequence函数创建不含重复项的随机序列数据集.创建随机字符串 ...
最新文章
- 使用TensorRT加速yolo3
- ph获取xml文件信息
- python文件流习题解析
- Robust principal component analysis?(RPCA简单理解)
- 信息系统项目管理师-信息系统安全管理核心知识思维脑图
- Linux网络编程(一):Linux内核
- 1712: 最大乘积(贪心/dfs)
- 看似无参却有参-----JS中的函数传参
- Maven打包排除某个资源或者目录
- [css] 写出你知道的CSS水平和垂直居中的方法
- unity 多台 显示器 控制_飞利浦292E2E评测丨宽屏显示器中的多面手
- 贺利坚老师汇编课程55笔记:带借位减法指令SBB
- vscode中查看二进制文件
- MATLAB中dsolve与syms
- 【AMAD】beaker -- 用于session和缓存的WSGI中间件
- 连接到物联网的12中通信技术
- 解决屏蔽流氓蜘蛛抓取,如MJ12bot 、DotBot 、BLEXBot 、PetalBot 、DataForSeoBot
- phpstudy环境下laravel项目,Nginx报错CreateFile failed
- C语言输出整数部分和小数部分
- 数据分析项目实战day1
热门文章
- python rgb2gray_Python--图像处理(2)
- stm32cubeide烧写程序_STM32CubeIDE使用入门的几个常见问题
- 这些年我用过的 6个API 接口文档平台,真的好用
- QT:MVC模式-MVD的使用DEMO
- VVC/H.266帧间模式(二):Merge mode with MVD (MMVD)
- FreeModbus 移植(从机实现)
- Sensor信号输出YUV、RGB、RAW DATA、JPEG【转】
- h5页面自适应手机屏幕宽度
- 纯web项目不能使用mui.preload进行页面预加载的解决办法
- 前端页面结构简单介绍