gpt4 book ai didi

c - 如何在函数中操作变量?

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

在下面的示例中,我将一个 char 作为指针传递给函数。当函数打印出char的内存地址时,是不同的地址。在这种情况下我要处理两个不同的变量吗?这与我没有在函数参数中使用指针(与按值传递相同)的结果不一样吗?

char a = 'a';
printf("a=%p\n", &a);
showString(a);

//function
void showString(char *c){
c='b';
printf("c=%p\n", &c);
}

c 被赋予值“b”。但是,如果我在函数调用后检查 a,它仍然具有值“a”。上面的内容需要如何更改才能使函数中赋值的值在函数外生效?

最佳答案

您没有正确使用指针:您没有为指针指向的对象分配新值,而是分配了指针本身。

调用应该使用寻址运算符,赋值应该使用解引用运算符:

showString(&a);
printf("a=%p\n", (void*)&a);
...
void showString(char *c){
*c='b';
printf("c=%p\n", (void*)c);
}

现在两个打印输出将产生相同的地址,调用函数中 char a 的值应该改变。

注意 1: 编译器允许 c = 'b' 赋值的原因有些奇怪:'b' 被认为是字符常量, char 被认为是整数类型,C 允许您将整数分配给指针,前提是您比编译器更清楚自己在做什么。

注意2:当你用%p打印指针时,指针类型既不是void*也不是char* ,需要转换为 void*。您正在打印 char*,因此它可以不进行强制转换,但我还是添加了强制转换,以防您想使用不同类型的指针进行尝试。

关于c - 如何在函数中操作变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44289497/

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