Сходства и различия между массивами и указателями на практическом примере

Учитывая следующий код:

#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);?

Заранее большое спасибо

Ответы на вопрос(5)

Ваш ответ на вопрос