c语言函数中字符串的传递,c语言中函数传递方式

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

1、值传递

桃江ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

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语言:传递字符串

你还记不记得交换两个数的数值的函数change(),如果直接将要交换的数传给change,是起不到交换的目的的(被交换的是change中的两个数,main中的那两个没有被交换),需要使用指针。

同理,把结构体传到你的函数中,改变的是这个函数中的结构体,不是main中的,试试把函数改成接受结构体指针的形式

另一个问题不会,呵呵,不好意思

C语言字符串数组指针的传递

简单写了一个,供参考

#include stdio.h

#include string.h

struct data {

int n;

char name[10];

};

//传入一个字符串指针name,给结构体相应变量赋值

void cp_str( char *name , int n )

{

struct data st;

strcpy( st.name , name );

st.n=n;

}

//输入数据,完成字符串的录入

void input_str()

{

int i=0;

for(i=0;i10;i++)

{

scanf("%s" ,name );

cp_str( name , i );

}

}

//主程序

int main()

{

input_str();

return 0;

}

C语言中怎样交换两个字符串

C语言中交换两个字符串需要借助strcpy函数或者使用自定义交换函数进行交换

如交换a,b数组中的字符串代码:

char a[10] = "abed", b[10] = "efg", t[10];

strcpy(t, a);//a复制给t

strcpy(a, b);//b复制给a

strcpy(b, t);//t复制给b

附:strcpy函数详情

原型声明:

char *strcpy(char* dest, const char *src);

头文件:

#include string.h 和 #include stdio.h

功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。

C语言 如何将一个字符串的内容传递给另一个字符串?详见内

#includestdio.h

#includestring.h

struct abc

{

char aaa[10];

}

int main()

{

struct abc mmm;

char temp[10]="0903";

strcpy(mmm.aaa,temp);//C语言标准库函数,将第二个参数的内容复制到第一个参数

return 0;

}

c语言字符串在函数间传递

#includestdio.h#includestring.hchar *start(char *wz);int main(){ char *sys = NULL; char xz,wz[99]="www"; scanf("%s",xz); if (xz=='1') sys=start(wz);/*将wz值传入start*/ printf("%s",sys);

if (sys != NULL) // 注意:分配内存以后一定要释放

free(sys); return 0;}char *start(char *wz){

char* str = (char*)malloc(99); // 堆中分配内存

strcpy(str, "am start -a android.intent.action.VIEW -d http://"); strcat(str,wz); return str; }

其实不建议以这种方式来写,start函数可以写成2元函数,一个函数传入参数,一个函数传出结果。

void start(char* pOut, char* pIn)

{

strcpy(pOut, "am start -a android.intent.action.VIEW -d http://");strcat(pOut, pIn);

}


网站标题:c语言函数中字符串的传递,c语言中函数传递方式
分享URL:http://myzitong.com/article/hsseeg.html