【发布时间】:2011-08-02 09:33:41
【问题描述】:
考虑以下函数:
char *f()
{
char *s=malloc(8);
}
main()
{
printf("%c",*f()='A');
}
如果我注释 char *s=malloc(8); 行,我会收到一个错误,好像赋值 *f()='A' 访问了无效内存。既然我从不返回任何变量,为什么上面的赋值完全有效?
第二个问题:'A' 分配给函数返回时创建的临时变量。那么为什么++a等不能作为左值呢?
【问题讨论】:
-
您使用的是哪个编译器?请发布确切的错误消息。
-
编译这段代码时没有任何警告吗?例如,在 f 中没有返回?
-
仅仅因为你观察到某些东西在工作并不意味着它完全有效。
int min(int a, int b) { return a; }这个函数的工作时间平均为 50%。 -
“为什么 [它] 会起作用?”因为您的编译器的警告不够高和/或您非常不走运。
-
我使用代码块。我知道这是错误的代码。没有警告。所以你的意思是在没有返回语句的情况下,函数返回一个随机地址。第二个问题呢?
标签: c function return-value lvalue