【发布时间】:2012-03-10 16:24:40
【问题描述】:
我发现自己无法解释为什么以下代码有效。不用说,我对 C++ 还是很陌生...
#include <cstdio>
void foo(char* p)
{
p[0] = 'y';
}
int main()
{
char a[1];
a[0] = 'x';
printf("a[0] = %c\n", a[0]);
foo(a);
printf("a[0] = %c\n", a[0]);
return 0;
}
这个程序输出
a[0] = x
a[0] = y
让我感兴趣的是,我不是将指针而是数组传递给 foo.那么foo如何改变数组a的值呢?这是否仅适用于 char 数组?
Difference between char and char[1] 的回答证实了我的观察,但没有详细说明为什么会出现这种情况。
谢谢!
【问题讨论】:
-
因为当您传递指针时,您传递的是对象的地址,因此您可以更改它的值;您的片段就是这种情况,例如在这种情况下,您不是将值传递给对象,而是将地址传递给对象 char[];
-
拿一本好的 C 初学者书籍阅读。您无法通过教程从 Internet 学习语言。或者,如果可以的话,这比通过书本学习要花更长的时间。
-
@Aamir +1 你在写。使用教程有时可以解决问题,但无法学习新技术......
-
记住,当像这样传入数组时,您还需要传入数组的大小,否则会发生各种“有趣”