gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:25 26 4
gpt4 key购买 nike

当我在做在线测验(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com