我刚开始使用 C,在我以前使用的语言中从来没有处理过指针,所以我想知道如果只修改一个字符串,哪种方法更好。
指针字符串与正常。
此外,如果您想提供有关何时使用指针的更多信息,那会很棒。当我发现函数“normal”甚至会修改传递的字符串,并在没有返回值的情况下在主函数中更新时,我感到震惊。
#include <stdio.h>
void pointerstring(char *s);
void normal(char s[]);
int main() {
char string[20];
pointerstring(string);
printf("\nPointer: %s\n",string);
normal(string);
printf("Normal: %s\n",string);
}
void pointerstring(char *s) {
sprintf(s,"Hello");
}
void normal(char s[]) {
sprintf(s,"World");
}
输出:
Pointer: Hello
Normal: World
最佳答案
在函数声明中,char []
和char *
是等价的。具有外层数组类型的函数参数被转换为等效的指针类型;这会影响调用代码和函数体本身。
因此,最好使用 char *
语法,否则您可能会感到困惑并尝试使用例如获取外层定长数组类型参数的sizeof
:
void foo(char s[10]) {
printf("%z\n", sizeof(s)); // prints 4 (or 8), not 10
}
当您传递声明为指向函数的指针的参数(并且指针参数未声明为 const
)时,您明确授予函数修改指针指向的对象或数组的权限.
关于C 函数实现 - 带指针与不带指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12089478/