c语言如何传递字符串?c语言函数中传递字符串,可以分为两种情况,一种是将字符串作为参数,一种是将字符串作为返回值
,当使用字符串作为返回值时 , 切记不要传递局部字符数组 。下面是一个示例代码:
#include
#include
#include
void f(char *str) {//字符串作参数
printf(str);
}
char * r() {//字符串作返回值
//使用动态分配内存,不要使用局部变量比如
//char buf[80]; 因为局部变量在函数结束时,栈区变量已被回收
char *str = (char *)malloc(256 * sizeof(char));
if (str==0) { printf("can't alloc mem\n"); return 0;}
else memset(str, 0x00 ,sizeof(char) * 256);
return str;//
}
int main()
{
char *pstr = r();
if (pstr!=0) strcpy(pstr, "hello world\n");
f(pstr);
free(pstr);
return 0;
}
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);
}
执行后 , 发生交换 。
参数传递只有上面三种 , 但是如果加上数组,就会产生几种新形式 。
首先,明确数组型变量名本身只是该数组所占存储空间C语言函数怎么传递字符串的首地址C语言函数怎么传递字符串:
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);
}
函数调用时,这里系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间,此后 , 将实参数组的首地址传递给形参变量 。
其实本质与下相同,只不过还是数组形式的(数组名代替指针) 。
既然数组型变量名本身只是该数组所占存储空间的首地址,C语言函数怎么传递字符串我们当然可以用指针做形参来接收数组实参 。
void fun(char *p){while (*p)
{
printf("%c", *p);
p++;
}
【C语言函数怎么传递字符串 c语言传入字符串】}void main()
{char str[] = "Hello World!";
fun(str);
}
不过问题是如果这样,无法把握数组结束(除非知道数组长度) 。而对于字符数组(上例) , 由于字符串末尾有结束标志'\0'(ascii码正好是0),所以就很容易利用指针来判断字符串是否结束 。
扩展资料:
调用带参数的函数:
在调用函数时 , 可以向其传递值 , 这些值被称为参数 。
这些参数可以在函数中使用 。
可以发送任意多的参数,由逗号 (,) 分隔:
myFunction(argument1,argument2) 。
当声明函数时,请把参数作为变量来声明:
function myFunction(var1,var2){这里是要执行的代码} 。
变量和参数必须以一致的顺序出现 。第一个变量就是第一个被传递的参数的给定的值 , 以此类推 。
按值传递参数:
按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身 , 即实参变量保持调用前的值不变 。
推荐阅读
- 把excel导入oracle数据库,excel数据导入oracle数据库
- 用gis实现元胞自动机,元胞自动机在数学建模中的应用
- 云南网站建设制作开发费用,昆明网站建设公司多少钱
- 引流管的疤痕如何去除图片,引流管的疤痕如何去除图片大全
- vb.net响应输入法 vb弹出输入框代码
- 930显卡怎么样能换吗,930显卡能玩什么游戏
- 网络游戏的名字格式,网络游戏的名字格式是什么
- vmware复制虚拟机文件,vmware虚拟机怎么复制虚拟机
- go语言缓存文件清理 go内存缓存