给定以下代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[1];
int * b = malloc(sizeof(int));
/* 1 */
scanf("%d", &a);
printf("%d\n", a[0]);
/* 2 */
scanf("%d", &b);
printf("%d\n", b[0]);
return 0;
}
在编译时(i686-apple-darwin9-gcc-4.0.1),会出现以下警告:
array.c: In function 'main':
array.c:9: warning: format '%d' expects type 'int *', but argument 2 has type 'int (*)[0u]'
array.c:14: warning: format '%d' expects type 'int *', but argument 2 has type 'int **'
但是,为什么第二个printf会出现执行错误,而第一个printf却可以正常工作呢?
更重要的是,如果将第一个scanf替换为scanf("%d", a);,为什么会得到相同的输出结果呢?
非常感谢您提前的帮助。