Você marcou sua pergunta C e C ++ ao mesmo tempo, enquanto a resposta é significativamente diferente nesses idiomas.
Em primeiro lugar, a redação do título da sua pergunta está incorreta (ou, mais precisamente, irrelevante para a própria pergunta). Nos dois 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, em seguida, é atribuído um valor significativo posteriormente. No segundo exemplo, as variáveis são inicializadas imediatamente.
Em segundo lugar, na linguagem C ++, como o @nightcracker observou em sua resposta, essas duas construções são semanticamente diferentes. O primeiro depende da inicialização, enquanto o segundo - da atribuição. Em C ++, essas operações são sobrecarregáveis e, portanto, podem potencialmente levar a resultados diferentes (embora se possa observar que produzir sobrecargas não equivalentes de inicialização e atribuição não é uma boa idéia).
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 depois atribuídas significativas valores posteriormente, quando esses valores significativos estiverem disponíveis.
Na linguagem C99, não há problema em declarar variáveis no meio do bloco (assim como em C ++), o que significa que a primeira abordagem é necessária apenas em algumas situações específicas quando o inicializador não é conhecido no ponto de declaração. (Isso também se aplica ao C ++).