Давайте посмотрим, какой код будет сгенерирован в каждом из случаев:
@_main proc near
push ebp
mov ebp,esp
; short int A[20];
add esp,-40
push ebx
; asm lea eax, A;
lea eax, word ptr [ebp-40]
; return A[0];
movsx eax,word ptr [ebp-40]
@_main proc near
push ebp
mov ebp,esp
; short int *A = new short int[20];
add esp,-4
push ebx
push 40
call @$bnwa$qui
pop ecx
mov dword ptr [ebp-4],eax
; mov eax, A;
mov eax, dword ptr [ebp-4]
; return A[0];
mov eax,dword ptr [ebp-4]
movsx eax,word ptr [eax]
То есть, в первом случае переменная A - непосредственно массив, а во втором она хранит адрес массива.