【发布时间】:2017-05-31 15:59:20
【问题描述】:
在下面的示例中,我将 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'。上述需要如何更改,以便函数中分配的值在函数之外继承?
【问题讨论】:
-
您正在打印
a的地址,但您正在将其值传递给您的函数。顺便说一句,您的编译器应该警告您有关隐式整数到指针的转换;如果不是,则调高警告级别。 -
"当函数打印出 char 的内存地址时,," ---> 函数试图打印
char *的地址,而不是char的地址。 -
已经有一个关于这个主题的线程可以帮助你。 stackoverflow.com/questions/14331411/passing-char-pointer-in-c
-
将
*替换为&,您尝试使用的语法就是如果您使用C++,引用将如何工作。但你不是:你正在使用 C 和指针。因此,必须使用地址和取消引用运算符。