【发布时间】:2009-04-19 23:31:51
【问题描述】:
鉴于 scanf 在 documentation from Microsoft 中有 (const char *) 以及对 this question 的答案,当我将 (char **) 提升为 (const char **) 时,到底发生了什么?
基本上为什么会编译?
#include <stdio.h>
int main(int argc, char **argv)
{
char szArray[50];
int i = 0;
strcpy(szArray,"10");
/* the following code is upcasting the (char *) to (const char *) */
sscanf(szArray,"%d",&i);
return 0;
}
为什么不能编译?
#include <stdio.h>
void processargs(const char **p)
{
}
int main(int argc, char **argv)
{
processargs(argv);
return 0;
}
两者似乎都对指针做同样的事情!
【问题讨论】:
-
你不明白一件事:如果 T -> U 有效,那并不意味着 T* -> U* 有效。只是一个简单的: double a = 4; /* int -> double / int p;双 *dp = &p; / int* -> double* ?? */
-
我这里没有改变类型...两个集合都是指针。
-
请关闭另一个而不是这个...
-
'*' 的数量很重要。仔细查看palecek 对您上一个问题的回答。
标签: c