问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言:字符串做为函数参数传递

发布网友 发布时间:2022-04-25 16:49

我来回答

5个回答

热心网友 时间:2022-05-01 18:05

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函数确定实参数组的下界和上界。

参考资料来源:百度百科-参数传递

参考资料来源:百度百科-字符串



热心网友 时间:2022-05-01 19:23

你用的c编译器还是c++编译器,我的c编译器是没问题的,c++会出现警告
建议你用display((char *)"code"); 应该不会用警告了追问我尝试了,的确不显示错误了,但是参数传递结果不对。
#include
void display(char *str)
{
char temp[10];
int i=0;
for(i=0;i<10;i++)
{
while(*str!='\0')
temp[i]=*str;
}
}
void main(void)
{
display((char *)"code");
}
结果temp[0]是‘c’,,temp[0]之后的就传不过去了,全是初始值0

哦,我忘记str++了,不好意思,我再试试

热心网友 时间:2022-05-01 20:58

我直接复制编译了一下,只有一个错误,void display(char str[])中的小括号是中文符号,改为英文符号就可以了。
如果不是这个错误,那错误一定在其它地方。
多数情况下,会这样写:
void display(char *str){}
与你写的一样用。

热心网友 时间:2022-05-01 22:49

把调用的地方修改为
display((char *)"code");

或则把函数声明为
void display(char *str)

热心网友 时间:2022-05-02 00:57

我试了,没错#include<stdio.h>
void display(char str[])
{
printf("%s",str);
}
void main(void)
{
display("code"); //警告错误的句子
}追问我的是picc编译器

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
平安e家保是什么险 2023年高级会计师报名时间和条件 2022高级会计师报考条件要求是什么? 问几个英文语法问题,希望能正确回答~ 女生锁骨下长痣,左右都有 不是很对称 寓意什么呐? 抖音上传照片音乐短怎么办 断夜奶好方法 婴儿断夜奶最佳方法 建设银行,你打算坑害多少优质客户? 【PS教程】如何做出凹陷字体效果的氛围海报 餐桌可以选用岩板吗? 字符数组做函数形参问题 字符型数组作为函数参数时的一个问题 宏陶岩板餐桌薄的好还是厚的好? 字符串数组指针作为函数的参数,哪里出错了? 请问岩板餐桌怎样选购? C++里string字符串数组,做函数的参数怎么写 用岩板做餐桌用什么规格的尺寸好? 字符数组元素作为函数调用参数 数组做函数参数时应注意的问题? C语言中如何将二维字符数组作为函数参数引用传递 C++ 怎么把字符数组当作函数参数传递? 字符数组作函数的餐数,对实参和形参有什么要求 4丁基间苯二酚水包油面霜的配方制作? 大家来看一下我的DIY面霜和唇膏的比例和配方怎么样... DIY护肤 如何自制一瓶无添加护肤乳液 如何自制面霜 DIY一瓶乳霜,水、油比例多少比较合适? 朱自清散文诗歌 朱自清的诗歌散文集有什么 C语言 char 字符数组 和 字符指针 作为 函数参数 的区别 家里装修用岩板定制厨房台面需要用多大厚度的? 分别用字符数组和字符指针作函数参数两种方法编程实现在字符串中删除与某字符相同的字符。 用岩板定制厨房台面用多大厚度的呢? C语言,分别用字符数组和字符指针作函数参数两种方法编程实现字符串 大理石餐桌和岩板餐桌怎么选?岩板餐桌的耐刮程度听说比较好? 要写一个字符数组的函数,函数的参数是字符数组,该怎么定义这函数? C++如何将二位字符数组作为参数传递给函数 二维字符数组作为函数参数,函数内怎样使用该字符数组的成员元素。 岩板餐桌怎么样? 编写程序,用字符数组作函数参数实现删除字符串中的指定连续字符. 餐桌选择岩板材质的,岩板餐桌是厚的好还是薄的好? 用字符数组作为函数参数编程实现在字符串中删除与某字符相同的字符 岩板橱柜台面选择厚度 餐桌什么材质的好如何选购 梦手心被蚂蚁咬个大窟窿 梦见蚂蚁咬手背而且很多蚂蚁,都咬出洞了,周公解梦 梦见蚂蚁咬去手指出了很多血 梦见蚂蚁咬我无名指不疼 梦见自己的手掌被蚂蚁咬烂