Saya selalu berpikir bahwa jika saya menyatakan tiga variabel ini bahwa mereka semua akan memiliki nilai 0
int column, row, index = 0;
Tapi saya menemukan bahwa hanya indeks yang sama dengan nol & yang lainnya adalah sampah seperti 844553 & 2423445.
Bagaimana saya bisa menginisialisasi semua variabel menjadi nol tanpa mendeklarasikan setiap variabel pada baris baru?
int* a, b, c;
tidak seperti apa tampilannya).=0
untuk masing-masing dalam definisi mereka. Dan, jika Anda benar-benar menginginkan banyak variabel, maka cobalah sebuah array:int a[10]={0}
akan menginisialisasi masinga[i]
- masing ke 0 untuk Anda.Jawaban:
sumber
Ketika Anda menyatakan:
Hanya indeks yang diatur ke nol.
Namun Anda dapat melakukan hal berikut:
Tetapi secara pribadi saya lebih suka hal-hal berikut yang telah ditunjukkan.
Ini bentuk yang lebih mudah dibaca menurut saya.
atau
sumber
bool previousInputValue, presentInputValue;
) atau jika keduanya bertipe sama sekarang tetapi tidak benar-benar perlu (uint8_t height, width;
mungkin berubah menjadiuint8_t height; uint16_t width;
di masa depan dan seharusnya menjadiuint8_t height; uint8_t width;
memulai dengan).uint8_t height; uint16_t width;
bukanuint8_t height, width;
menyimpan 10 karakter di masa depan. :-) Anda tentu saja dapat melakukannya sesuka Anda. Pastikan Anda membuatnya mudah dibaca. Jadi bentuk terakhir adalah yang paling eksplisit.int presentValue = 0; typeof(presentValue) previousValue = presentValue;
, tapi saya percaya itutypeof()
adalah perpanjangan GCC non-standar.Seperti yang dikatakan @Josh, jawaban yang benar adalah:
Anda harus berhati-hati terhadap hal yang sama dengan pointer. Ini:
Setara dengan:
sumber
unsigned long x, y;
dinyatakanx
sebagaiunsigned long
tetapiy
hanyaunsigned
, aliasunsigned int
! Itu persis sama! </rant>int *a
cara yang*a
mewakiliint
nilai.void* a
akan dikompilasi danvoid *a, b, c
tidak. Rasionalisasi ini bekerja untuk saya.Jika Anda mendeklarasikan satu variabel / objek per baris tidak hanya menyelesaikan masalah ini, tetapi membuat kode lebih jelas dan mencegah kesalahan konyol saat mendeklarasikan pointer.
Untuk langsung menjawab pertanyaan Anda, Anda harus menginisialisasi setiap variabel menjadi 0 secara eksplisit.
int a = 0, b = 0, c = 0;
.sumber
Perhatikan bahwa formulir ini juga akan berfungsi dengan tipe kustom, terutama ketika konstruktornya mengambil lebih dari satu argumen.
sumber
auto
...): kolom int { 0 } , baris { 0 } , indeks { 0 } ;Mulai 2k18, Anda dapat menggunakan Structured Bindings :
Demo
sumber
Kemungkinan pendekatan:
memset
atau{0}
array.struct
, danmemset
atau memiliki konstruktor yang akan menginisialisasi mereka ke nol.sumber
Saya tidak akan merekomendasikan ini, tetapi jika Anda benar-benar menjadi satu baris dan hanya menulis 0 sekali, Anda juga dapat melakukan ini:
sumber
Seperti yang telah disebutkan orang lain, dari C ++ 17 dan seterusnya Anda dapat menggunakan binding terstruktur untuk beberapa tugas variabel.
Menggabungkan ini dengan
std::array
dan mengurangi argumen templat kita dapat menulis fungsi yang memberikan nilai ke sejumlah variabel acak tanpa mengulang jenis atau nilai .Demo
sumber
Ketika Anda mendeklarasikan variabel tanpa menginisialisasi, nomor acak dari memori dipilih dan variabel diinisialisasi ke nilai itu.
sumber