【发布时间】:2011-07-03 20:23:50
【问题描述】:
我今天正在学习 C。一段时间以来,我一直在使用托管语言(Java、C#、Python 等)进行编码。我以为我了解了指针的细节,但后来我编写了以下代码,按预期工作,但生成了“不兼容的指针类型”警告。
void setText(char* output) {
//code to set output to whatever, no problems here.
}
int main(int argc, const char* argv[]) {
char output[10];
setText(&output);
//[EDITED] ...other test code which printf's and further manipulates output.
return 0;
}
所以我用谷歌搜索,最后换行了
setText(&output);
到
setText(output);
摆脱了警告。但现在我不知道为什么第一个工作在所有。据我所知,我正在发送地址的地址(因为 char* x; 本质上与 char x[]; 相同)。我有什么误解,为什么这两种方法都有效?
【问题讨论】:
-
很难告诉你为什么
setText在没有看到它的实现的情况下工作。虽然,如果所有setText都设置了一个变量,然后程序退出,你怎么能真正判断程序是否在做你想做的事? -
T *与T [K]不相同。参见例如c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr -
@Cameron:现在不适合我——也许你遇到了短暂的中断。你能再试一次吗?
-
@delnan:一定是这样,现在也对我有用 :-)