通过在函数中使用双指针作为参数,下面的程序可以修改字符串,我明白了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void display(char** output)
{
printf("%s\n", *output);
*output = "This is another test";
}
int main(void)
{
char* str = "This is a test";
display(&str);
printf("After the call: %s\n", str);
return 0;
}
但是,我不明白为什么像下面这样使用单个指针作为参数不能修改字符串。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void display(char* output)
{
printf("%s\n", output);
output = "This is another test";
printf("%s\n", output);
}
int main(void)
{
char* str = "This is a test";
display(str);
printf("After the call: %s\n", str);
return 0;
}
在 C 中,字符串是一个字符数组,其类型可以是
char*
或 char[]
因此要修改指针,您必须使用双指针。
您不能在函数中分配参数。
void func(int* a) {
int b = 0;
*a = b; // that'll work.
a = &b; // that doesn't.
}
使用
char**
做你想做的事。
你可以想象函数和它的调用方式如下
char* str = "This is a test";
display(str);
//...
void display( /* char* output */ )
{
char *output = str;
printf("%s\n", output);
output = "This is another test";
printf("%s\n", output);
}
即参数表达式
str
用于初始化函数局部变量output
。在函数内,正在更改的是其局部变量output
。用作函数局部变量初始值设定项的指针 str
保持不变。该函数不处理str
,除了使用它来初始化其参数output
.