为什么单指针作为参数不能修改字符串(在 c 中)

问题描述 投票:0回答:3

通过在函数中使用双指针作为参数,下面的程序可以修改字符串,我明白了。

#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 pointers double-pointer
3个回答
0
投票

在 C 中,字符串是一个字符数组,其类型可以是

char*
char[]
因此要修改指针,您必须使用双指针。


0
投票

您不能在函数中分配参数。

void func(int* a) {
    int b = 0;
    *a = b; // that'll work.
    a = &b; // that doesn't.
}

使用

char**
做你想做的事。


0
投票

你可以想象函数和它的调用方式如下

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
.

© www.soinside.com 2019 - 2024. All rights reserved.