c - 将字符串地址作为参数传递给指向 Char 函数的指针的指针

标签 c string char

当我在做在线测验(http://www.mycquiz.com/)时,我想到了这个问题:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void myfunc(char** param){
    ++param;
}
int main(){
    char* string = (char*)malloc(64);
    strcpy(string, "hello_World");
    myfunc(&string);
    printf("%s\n", string);
    // ignore memory leak for sake of quiz
    return 0;

我的第一个答案选择是字符串会被修改,但这并没有发生,我很困惑为什么不呢?他传递的不是文字的地址吗? 我也想到这些情况会如何变化?

void myfunc(char* param){
        ++param;
}
int main(){
    char* string = (char*)malloc(64);
    strcpy(string, "hello_World");
    myfunc(string);

void myfunc(char* param){
    ++param;
}
int main(){
    char string[12];
    strcpy(string, "hello_World");
    myfunc(string);

它们似乎都没有真正改变传递的字符串。因此,如果我确实需要修改字符串,我该如何通过引用传递它?

谢谢。

最佳答案

在所有情况下,您都是将指向某物的指针传递给 C 函数,修改指针而不是其内容,然后在 main() 中打印字符串。当您传递一个指针时,会生成它的副本,因此您在函数中修改的版本不会影响 main() 中的值。这就是为什么除非您开始修改指针的内容,否则您将看不到字符串有任何变化。

如果您希望对字符串进行更改:

void myfunc(char** param){
        ++(*param);
}

将打印 ello_World,因为它将增加 main() 使用的地址以指向包含字符串的内存。

void myfunc(char* param){
    ++(*param);
}

将打印 iello_World,因为它将修改包含字符串的实际内存中的第一个 char

关于c - 将字符串地址作为参数传递给指向 Char 函数的指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25555203/

相关文章:

c - 简单的C scanf 不起作用?

ruby - 在单引号字符串Ruby中打印打印变量

python - 将 print 语句添加到 ValueError 异常

c# - 字符串 "a"不等于 C# 中的 Char "a"?

c - 将指针移动到所需位置

c - 我在 Bison 中的 C 函数?

c - 如何将指针指向的 textf 的内容复制到 char 数组(即指针 -> char 数组)

c++ - 是否可以在 char 中返回 "weird"个字符?

c - Memcpy 到 malloced 结构内的数组中

json - 如何将 Angular 中的单个 json 数据 "values"绑定(bind)到命名 $scope 变量(使用 SPARQL 查询返回的数据)?