如何将字符串声明为c中函数的参数?
How is a string declared as a parameter to a function in c?
我想知道字符串可以通过哪些方式传递给函数以及函数声明的相应语法是什么。
C语言中没有string类型,是char类型的数组。您可以通过传递第一个元素的地址和数组的大小将其传递给函数,或者您将取决于终止字符 '\n'
.
To define a string
char str[] = "A String";
以上行在内存中存储为:
pass it to a function
要传递数组,函数原型必须如下:
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
.
的指针按引用传递
相关:
- What's the difference between passing by reference vs. passing by value?
函数声明:
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 中,字符串是包含 zero-valued 终止符的字符值序列 - 字符串 "hello"
表示为序列 {'h', 'e', 'l','l', 'o', 0}
.
字符串(包括字符串文字)存储在字符类型的数组中:
char str[] = "hello";
除非它是 sizeof
或一元 &
运算符的操作数,或者是用于在声明中初始化字符数组的字符串文字(如上),expression 类型“T
的 N-element 数组”将被转换(“衰减”)为类型“指向 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] )
但它们都会被解释为
void foo( char *str )
我想知道字符串可以通过哪些方式传递给函数以及函数声明的相应语法是什么。
C语言中没有string类型,是char类型的数组。您可以通过传递第一个元素的地址和数组的大小将其传递给函数,或者您将取决于终止字符 '\n'
.
To define a string
char str[] = "A String";
以上行在内存中存储为:
pass it to a function
要传递数组,函数原型必须如下:
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
.
相关:
- What's the difference between passing by reference vs. passing by value?
函数声明:
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 中,字符串是包含 zero-valued 终止符的字符值序列 - 字符串 "hello"
表示为序列 {'h', 'e', 'l','l', 'o', 0}
.
字符串(包括字符串文字)存储在字符类型的数组中:
char str[] = "hello";
除非它是 sizeof
或一元 &
运算符的操作数,或者是用于在声明中初始化字符数组的字符串文字(如上),expression 类型“T
的 N-element 数组”将被转换(“衰减”)为类型“指向 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] )
但它们都会被解释为
void foo( char *str )