Hai taggato la tua domanda C e C ++ allo stesso tempo, mentre la risposta è significativamente diversa in queste lingue.
In primo luogo, la formulazione del titolo della tua domanda non è corretta (o, più precisamente, irrilevante per la domanda stessa). In entrambi i casi la variabile è dichiarata e definita contemporaneamente, in una riga. La differenza tra i tuoi esempi è che nella prima le variabili sono lasciate non inizializzate o inizializzate con un valore fittizio e quindi è assegnate a valore significativo dopo. Nel secondo esempio le variabili sono inizializzate subito.
In secondo luogo, in linguaggio C ++, come @nightcracker ha notato nella sua risposta questi due costrutti sono semanticamente differenti. Il primo si basa sull'inizializzazione mentre il secondo su incarico. In C ++ queste operazioni sono sovraccariche e quindi possono potenzialmente portare a risultati diversi (anche se si può notare che produrre sovraccarichi non equivalenti di inizializzazione e assegnazione non è una buona idea).
Nel linguaggio C standard originale (C89 / 90) è illegale dichiarare variabili nel mezzo del blocco, motivo per cui si potrebbero vedere le variabili dichiarate non inizializzate (o inizializzate con valori dummy) all'inizio del blocco e poi ha assegnato valori significativi successivamente, quando questi valori significativi diventano disponibili.
Nel linguaggio C99 è OK dichiarare le variabili nel mezzo del blocco (proprio come in C ++), il che significa che il primo approccio è necessario solo in alcune situazioni specifiche quando l'inizializzatore non è noto nel punto di dichiarazione. (Questo vale anche per il C ++).