Anda telah menandai pertanyaan C dan C ++ secara bersamaan, sementara jawabannya sangat berbeda dalam bahasa-bahasa ini.
Pertama, kata-kata dari judul pertanyaan Anda salah (atau, lebih tepatnya, tidak relevan dengan pertanyaan itu sendiri). Dalam kedua contoh Anda, variabel dideklarasikan dan didefinisikan secara bersamaan, dalam satu baris. Perbedaan antara contoh Anda adalah bahwa pada variabel pertama dibiarkan tidak diinisialisasi atau diinisialisasi dengan nilai dummy dan kemudian diberi nilai yang bermakna kemudian. Dalam contoh kedua variabel diinisialisasi segera.
Kedua, dalam bahasa C ++, seperti yang dicatat oleh @nightcracker dalam jawabannya, kedua konstruk ini secara semantik berbeda. Yang pertama bergantung pada inisialisasi sedangkan yang kedua - pada tugas. Dalam C ++ operasi ini kelebihan beban dan karena itu berpotensi menyebabkan hasil yang berbeda (walaupun orang dapat mencatat bahwa memproduksi inisialisasi dan penugasan yang tidak setara bukanlah ide yang baik).
Dalam bahasa C standar asli (C89 / 90) adalah ilegal untuk mendeklarasikan variabel di tengah blok, itulah sebabnya Anda mungkin melihat variabel dinyatakan tidak diinisialisasi (atau diinisialisasi dengan nilai dummy) di awal blok dan kemudian ditugaskan bermakna nilai nanti, ketika nilai-nilai bermakna itu tersedia.
Dalam bahasa C99 tidak apa-apa untuk mendeklarasikan variabel di tengah-tengah blok (seperti dalam C ++), yang berarti bahwa pendekatan pertama hanya diperlukan dalam beberapa situasi tertentu ketika penginisialisasi tidak diketahui pada titik deklarasi. (Ini juga berlaku untuk C ++).