& definição de operador para matrizes em C

Uma pergunta recente levou a uma discussão centrada em matrizes e ponteiros. A pergunta estava em referência ascanf("%s", &name) vsscanf("%s", name).

Para o código a seguir, a Microsoft resolve isso para você no VS2010 (e talvez nas versões anteriores?),

#include <stdio.h>

int main()
{
    char name[30];

    printf("Scan \"name\" - ");
    scanf("%s", name);
    printf("Print \"&name\" - %s\n", &name);
    printf("Print \"name\"  - %s\n", name);

    printf("Pointer to &name - %p\n", &name);
    printf("Pointer to name  - %p\n", name);

    printf("\n\n");

    printf("Scan \"&name\" - ");
    scanf("%s", &name);
    printf("Print \"&name\" - %s\n", &name);
    printf("Print \"name\"  - %s\n", name);

    printf("Pointer to &name - %p\n", &name);
    printf("Pointer to name  - %p\n", name);

    return 0;
}

Isso é realmente definido no Padrão ANSI C ou é permitido depender do compilador? Isso funciona porque a MS está tratando tudo como C ++? Por favor, ignore os problemas de estouro de buffer por enquanto.

questionAnswers(2)

yourAnswerToTheQuestion