Você marcou sua pergunta C e C ++ ao mesmo tempo, enquanto a resposta é significativamente diferente nesses idiomas.
Em primeiro lugar, o texto do título da sua pergunta está incorreto (ou, mais precisamente, irrelevante para a pergunta em si). Em ambos os exemplos, a variável é declarada e definida simultaneamente, em uma linha. A diferença entre seus exemplos é que no primeiro as variáveis são deixadas não inicializadas ou inicializadas com um valor fictício e então é atribuído um valor significativo mais tarde. No segundo exemplo, as variáveis são inicializadas imediatamente.
Em segundo lugar, na linguagem C ++, como @nightcracker observou em sua resposta, esses dois construtos são semanticamente diferentes. O primeiro depende da inicialização, enquanto o segundo - na atribuição. Em C ++, essas operações são sobrecarregáveis e, portanto, podem potencialmente levar a resultados diferentes (embora se possa notar que produzir sobrecargas não equivalentes de inicialização e designação não é uma boa ideia).
Na linguagem C padrão original (C89 / 90) é ilegal declarar variáveis no meio do bloco, e é por isso que você pode ver variáveis declaradas não inicializadas (ou inicializadas com valores fictícios) no início do bloco e em seguida, atribuir valores significativos posteriormente, quando esses valores significativos ficarem disponíveis.
Na linguagem C99, não há problema em declarar variáveis no meio do bloco (como em C ++), o que significa que a primeira abordagem é necessária apenas em algumas situações específicas em que o inicializador não é conhecido no ponto de declaração. (Isso também se aplica ao C ++).