问题描述
我想知道可以通过什么方式将字符串传递给函数,以及函数声明的相应语法是什么。
解决方法
在C中没有称为字符串的类型,它是char的数组。您可以通过传递第一个元素的地址和数组的大小将其传递给函数,否则将取决于终止字符'\n'
。
定义字符串
char str[] = "A String";
将其传递给函数
要传递数组,函数原型必须为:
returnType funName(char * str);
- 请注意returnType可以是任何类型
函数调用将类似于:
funName(&str[0]); or funName(str);
函数内部的操作(假设您要逐个字符地打印字符串)
returnType funName(char * str) {
uint8_t loopIndex = 0;
while(str[loopIndex] != '\n') {
printf("%c",str[loopIndex]);
}
return whatEver;
}
- 请注意,您可以将数组的大小作为参数传递给函数
在C语言中,字符串不过是字符数组。下面是示例
void myfun(char *str) { // collecting in a pointer
printf("%s",str);
}
int main() {
char str[] = "Independance" ;
myfun(str); // Passing address of an array
return 0;
}
,
在C语言中,字符串不按值传递给函数。它们通过引用传递给指向char
的指针。
相关:
函数声明:
void foo (char *p_s);
p_s
是指向char
的指针。
如果您不想修改引用传递的字符串,则可以将p_s
定义为const char * p_s
。如果您不希望指针更改为指向调用者中字符串开头以外的任何其他位置,则可以将p_s
定义为char * const p_s
。如果两者都需要,可以将p_s
声明为char const * const p_s
。
函数调用:
const char s[] = "Hello World!";
foo(s);
,
在C中,字符串是包含零值终止符的字符值序列-字符串 red hat,searchall,2,centos is my bro,red hat is my course,ubuntu is my OS,--,tom outsmart jerry,red hat is my boy,jerry is samall
表示为序列"hello"
。
字符串(包括字符串文字)存储在字符类型的数组中:
{'h','e','l','o',0}
除非它是char str[] = "hello";
或一元sizeof
运算符的操作数,或者是用于初始化声明中的字符数组的字符串文字(如上述),否则 expression 类型为“ &
的N元素数组”的/ em>将被转换(“衰变”)为类型为“指向T
的指针”的表达式,该表达式的值将为数组的第一个元素。
因此,如果您调用类似的函数
T
该函数实际接收的是foo( str );
,而不是char *
的数组,因此原型将是
char
在函数参数声明的上下文中,将void foo( char * ); // declaration
void foo( char *str ) { ... } // definition
和T a[N]
调整为T a[]
,因此您也可以将原型写为
T *a
或
void foo( char str[] )
但它们都将被解释为
void foo( char str[N] )