当前位置:首页 » 编程语言 » c语言字符数组函数参数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言字符数组函数参数

发布时间: 2022-02-08 00:28:13

c语言中,我写了一个函数,参数是字符串数组,应该怎样才可以在函数在获取参数的长度.我怎么弄都是4..

int length(const char *string1) //string是c++定义的类名
{int i = 0;
while (*string1++)
i++;
return i;
}

char a[2]; // 这是定义一个字符数组,不是一个字符串,内存中开辟2个字节,后面的不管了
const char *a="12";//这才是一个字符串,内存中占了3各字节'1''2''\0' ,不一样的!

❷ c语言字符串指针作函数参数。

fun函数里面指针s=a传递的是函数地址,s在函数入口承接p指针值,之后接a,不改变p指针地址下的值!

❸ c语言,字符数组函数

#include<stdio.h>

/*比较两个字符串*/
/*src、dst相等return1*/
/*src比dst短return-2*/
/*src比dst长return2*/
/*src、dst长度一致但不相等return-1*/
intstringCmp(char*src,char*dst){
if(strlen(src)<strlen(dst))
return-2;
elseif(strlen(src)>strlen(dst))
return2;
else{
while(*src&&*dst){
if(*src!=*dst)
return-1;
src++;
dst++;
}
return1;
}
}

/*合并两个字符串*/
voidmergeString(char*str1,char*str2,char*merge){
while(*merge++=*str1++);/*复制str1并将指针移动到字符串的末尾的下一个位置*/
merge--;/*退到字符串的末尾*/
while(*merge++=*str2++);/*从末尾()的位置开始将str2拷贝进来*/
*merge='';
}

intmain(void){
char*str1_1="hel",*str1_2="lo",*merge1;
char*str2_1="ness",*str2_2="happy",*merge2;
char*str3_1="hi",*str3_2="hi",*merge3;
char*str4_1="hello",*str4_2="world",*merge4;

puts("第1组字符串:");
puts(str1_1);
puts(str1_2);

if(stringCmp(str1_1,str1_2)==1)
puts(str1_1);

elseif(stringCmp(str1_1,str1_2)==-2){
mergeString(str1_2,str1_1,merge1);
puts(merge1);
}

elseif(stringCmp(str1_1,str1_2)==2||stringCmp(str1_1,str1_2)==-1){
mergeString(str1_1,str1_2,merge1);
puts(merge1);
}

putchar(' ');
puts("======================================================");
putchar(' ');

puts("第2组字符串:");
puts(str2_1);
puts(str2_2);

if(stringCmp(str2_1,str2_2)==1)
puts(str2_1);

elseif(stringCmp(str2_1,str2_2)==-2){
mergeString(str2_2,str2_1,merge2);
puts(merge2);
}

elseif(stringCmp(str2_1,str2_2)==2||stringCmp(str2_1,str2_2)==-1){
mergeString(str2_1,str2_2,merge2);
puts(merge2);
}

putchar(' ');
puts("======================================================");
putchar(' ');

puts("第3组字符串:");
puts(str3_1);
puts(str3_2);

if(stringCmp(str3_1,str3_2)==1)
puts(str3_1);

elseif(stringCmp(str3_1,str3_2)==-2){
mergeString(str3_2,str3_1,merge3);
puts(merge3);
}

elseif(stringCmp(str3_1,str3_2)==2||stringCmp(str3_1,str3_2)==-1){
mergeString(str3_1,str3_2,merge3);
puts(merge3);
}

putchar(' ');
puts("======================================================");
putchar(' ');

puts("第4组字符串:");
puts(str4_1);
puts(str4_2);

if(stringCmp(str4_1,str4_2)==1)
puts(str4_1);

elseif(stringCmp(str4_1,str4_2)==-2){
mergeString(str4_2,str4_1,merge4);
puts(merge4);
}

elseif(stringCmp(str4_1,str4_2)==2||stringCmp(str4_1,str4_2)==-1){
mergeString(str4_1,str4_2,merge4);
puts(merge4);
}

putchar(' ');
puts("======================================================");
putchar(' ');

getch();/*屏幕暂留*/
return0;
}

运行结果

❹ c语言字符型数组传入函数

在主函数里面,sizeof是数组占的空间
在作为参数时,会被转为指针
所以在函数里面打印的是sizeof(char*)
对于任意指针,sizeof的值都是当前编译器位数。你的是32位编译器,输出就是4
ps:4字节=32位

❺ C语言,分别用字符数组和字符指针作函数参数两种方法编程实现字符串

#include <stdio.h>
#include <string.h>
#include <malloc.h>

void niXuArr(char arr[]);
char * niXuPoint(char *p);

int main(void)
{
char arr[] = {"abcdefghigk"}, *p = "you are the first";
printf("逆序前:%s\n逆序后:", arr);
niXuArr(arr);
printf("%s\n", arr);

printf("逆序前:%s\n逆序后:", p);

p = niXuPoint(p);
printf("%s\n", p);
return 0;
}

void niXuArr(char arr[])
{
int i = 0;
char temp = 0;

for(i = 0; i < strlen(arr) / 2; i++)
{
temp = arr[i];
arr[i] = arr[strlen(arr) - 1 - i];
arr[strlen(arr) - 1 - i] = temp;
}
}

char * niXuPoint(char *p)
{
char *pHead = NULL, *pTail = NULL, temp = 0;

int i = 0;

pHead = (char*)malloc(strlen(p));
pTail = p + strlen(p) - 1;
p = pHead;

for(i = 0; i < strlen(p); i++)
{
*pHead++ = *pTail--;
}

*pHead = '\0';

return p;
}

❻ C语言 char 字符数组 和 字符指针 作为 函数参数 的区别

在C语言中,数组作为参数,进行传递时,传递的是指针 ,换句话说,字符数组作为参数,进行传递时,传递的是字符数组的起始地址,相当于一个字符指针,两者没有区别。比如下面的代码:

#include<stdio.h>

voidf1(char*s){printf("%s ",s);}
voidf2(charsa[]){printf("%s ",sa);}

intmain()
{
charrsa[]="worldhello";
f1(rsa);
f2(rsa);
return0;
}

❼ c语言二维字符数组传入函数的问题

既然只传一行,干嘛要用(*)[]型形参?用char *p或char p[]不就足够了?另外,50x1000000的数组大了点,声明全局数组吧,局部数组不支持。

❽ C语言中如何将二维字符数组作为函数参数引用传递

不可能达到目的。因为C语言中没有引用这类型,C++才有。另,C/C++都不支持传递数组,只能传递数组的首元素或行指针,所以即使是C++,也只能传递数组指针的引用,而不可能传递数组的引用,因为数组没有引用。

❾ C语言中关于字符数组做形参的问题~菜鸟求救~

1、字符串中以'\0'为结束符,你的str2中最后没有结束符,所以会出现你所说的问题
解决方法
1)、可以在str2[13] = {0};定义时初始化为全0
2)、或者在执行conv(str1,str2);后str2[12] = '\0';

2、你将str2声明成了char类型,与cnect中所需要的类型不匹配··

❿ 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 b=%d ", 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 b=%d ", 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] != ''; 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);

}

不过问题是如果这样,无法把握数组结束(除非知道数组长度)。而对于字符数组(上例),由于字符串末尾有结束标志''(ascii码正好是0),所以就很容易利用指针来判断字符串是否结束。

(10)c语言字符数组函数参数扩展阅读:

调用带参数的函数:

在调用函数时,可以向其传递值,这些值被称为参数。

这些参数可以在函数中使用。

可以发送任意多的参数,由逗号 (,) 分隔:

myFunction(argument1,argument2)。

当声明函数时,请把参数作为变量来声明:

function myFunction(var1,var2){这里是要执行的代码}。

变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。

按值传递参数:

按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。

按值传递参数时,需要在参数名前加"ByVal"关键字。

按地址传递参数:

按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。

如果实参是一个常数或表达式,Visual Basic 6.0会按"传值"方式来处理,按地址传递不需要"ByVal"关键字。

按数组传递参数:

在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组参数在传递时应注意以下两个方面:

① 在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔。

② 被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界。

参考资料来源:网络-参数传递

参考资料来源:网络-字符串