Сходства и различия между массивами и указателями на практическом примере
Учитывая следующий код:
#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 ("% d", a);?
Заранее большое спасибо