我很难理解这两个源代码的打印值.
#include<stdio.h>
void a(void){
int a;
a++;
printf("%d\n",a);
}
int main(void){
a();
a();
a();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么这个代码打印出"1 2 3",而第二个代码:
#include<stdio.h>
void a(void){
int a;
a++;
printf("%d\n",a);
}
int main(void){
int b;
printf("%d\n",b);
a();
a();
a();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印出:"0,垃圾值,相同的垃圾值+1,相同的垃圾值+2".
主函数(或任何其他函数)中的任何未初始化对象是否应该被赋予随机(垃圾)值?
更新:我觉得解释"变量是未初始化的,所以他们可以从其他程序获得任何剩余的值 - > UB"是不够的.我可以复制粘贴相同的源代码100次,仍然得到打印值0.我使用的是gcc 4.4.3.
如何声明f作为指向函数的指针(指向指向整数的指针,双精度)以返回指向整数的指针?
我尝试了很多变种,包括:
(int**)(f*)(int**,double)
(**int)(f*)(int**,double)
*(int)(f*)(int**,double)
Run Code Online (Sandbox Code Playgroud) c ×2