c语言 怎么样才能将字符串作为函数参数?函数的原型、调用、首部行该怎么写?举个简单例子int myfuction (char *id){
printf("%s\n",id);
return strlen(id);
}
main(){
char id[80] = "abc";
printf("%d", myfuction(id));
}
如何用c语言编一个函数 实现字符串作参数传递,给个编译过的程序st 传入子程序, st2 从子程序送回.
---------------------------
#include stdio.h
void show_st( char *st, char *st2){
printf("%s\n", st);
strcpy(st2,"new string !!");
}
void main()
{
char st[32]="This is string !";
char new_st[32];
show_st( st[0], new_st[0]);
printf("new string is: %s\n", new_st);
exit(0);
}
c语言中双引号引起来的字符串可以作为函数参数吗可以的 , 就像以下代码:
void show(char *str)
{
printf("%s\n", str);
}
你在调用的时候,一般是传一个变量进去,同样也可以传一个字符串常量进去,
例如show("Hello World");
为什么可以呢?首先要想,什么是变量,变量代表着值不确定,是动态的 。
而当一个变量有值的时候,除非它发生改变,否则它就是"确定"的 。
既然一个不确定的东西能作为参数传递过去,那么一个确定的字符串有何理由不能传递呢?
c语言字符串指针作函数参数 。fun函数里面指针s=a传递的是函数地址,s在函数入口承接p指针值,之后接a,不改变p指针地址下的值!
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;
【c语言c字符串函数参数 c语言 字符串参数】}
}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语言中对字符串进行操作的标准库函数有哪些1)字符串操作
strcpy(p, p1) 复制字符串
strncpy(p, p1, n) 复制指定长度字符串
strcat(p, p1) 附加字符串
strncat(p, p1, n) 附加指定长度字符串
strlen(p) 取字符串长度
strcmp(p, p1) 比较字符串
strcasecmp忽略大小写比较字符串
strncmp(p, p1, n) 比较指定长度字符串
strchr(p, c) 在字符串中查找指定字符
strrchr(p, c) 在字符串中反向查找
strstr(p, p1) 查找字符串
strpbrk(p, p1) 以目标字符串的所有字符作为集合c语言c字符串函数参数,在当前字符串查找该集合的任一元素
strspn(p, p1) 以目标字符串的所有字符作为集合c语言c字符串函数参数,在当前字符串查找不属于该集合的任一元素的偏移
strcspn(p, p1) 以目标字符串的所有字符作为集合c语言c字符串函数参数 , 在当前字符串查找属于该集合的任一元素的偏移
* 具有指定长度的字符串处理函数在已处理的字符串之后填补零结尾符
2)字符串到数值类型的转换
strtod(p, ppend) 从字符串 p 中转换 double 类型数值,并将后续的字符串指针存储到 ppend 指向的 char* 类型存储 。
strtol(p, ppend, base) 从字符串 p 中转换 long 类型整型数值 , base 显式设置转换的整型进制,设置为 0 以根据特定格式判断所用进制,0x, 0X 前缀以解释为十六进制格式整型,0前缀以解释为八进制格式整型
atoi(p) 字符串转换到 int 整型
atof(p) 字符串转换到 double 符点数
atol(p) 字符串转换到 long 整型
3)字符检查
isalpha() 检查是否为字母字符
isupper() 检查是否为大写字母字符
islower() 检查是否为小写字母字符
isdigit() 检查是否为数字
isxdigit() 检查是否为十六进制数字表示的有效字符
isspace() 检查是否为空格类型字符
iscntrl() 检查是否为控制字符
ispunct() 检查是否为标点符号
isalnum() 检查是否为字母和数字
isprint() 检查是否是可打印字符
isgraph() 检查是否是图形字符,等效于 isalnum() | ispunct()
c语言c字符串函数参数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言 字符串参数、c语言c字符串函数参数的信息别忘了在本站进行查找喔 。
推荐阅读
- python下单数据串了,python 表单数据
- 小熊省省app安卓版,小熊省省可靠吗
- 20款迈腾怎么放u盘音乐,新款迈腾怎么用usb听歌
- python中的自建函数 python自己创建函数
- jquery判断是否含有input标签的简单介绍
- rpg恐怖剧情解谜冒险游戏,rpg解密恐怖游戏
- erp系统的工作目标,erp的目标是什么?它有哪些特点
- python函数都有啥 python的各种函数
- flutter多产物并存的简单介绍