Rumah >pembangunan bahagian belakang >C++ >Mengapakah `sizeof` Menghasilkan Keputusan Berbeza untuk Huruf Rentetan, Penunjuk dan Tatasusunan Aksara?

Mengapakah `sizeof` Menghasilkan Keputusan Berbeza untuk Huruf Rentetan, Penunjuk dan Tatasusunan Aksara?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-01 06:28:15830semak imbas

Why Does `sizeof` Produce Different Results for String Literals, Pointers, and Character Arrays?

Saiz Huruf Rentetan

Kod yang diberikan menunjukkan penggunaan operator saiz pada pelbagai jenis pemalar rentetan. Output mendedahkan bahawa saiz rentetan literal, sizeof("f"), berbeza daripada saiz penunjuk kepada rentetan literal (sizeof(foo)), serta saiz tatasusunan aksara (sizeof(bar )).

Mengapa sizeof mengira panjang rentetan literal?

Saiz operator mengira saiz operannya dalam bait. Untuk literal rentetan, operan ialah perwakilan tatasusunan aksara yang sepadan, termasuk aksara null (' ') penamat. Ini menerangkan output 2 untuk sizeof("f"), kerana ia mengambil kira aksara 'f' dan ' '.

Adakah rentetan literal mempunyai jenis yang berbeza apabila diberikan kepada sizeof?

Tidak. Literal rentetan mempunyai jenis const char[N], dengan N ialah panjang rentetan, termasuk aksara nol penamat. Walau bagaimanapun, apabila menghantar rentetan literal kepada operator saiz, ia menganggap rentetan sebagai ungkapan jenis const char*, iaitu jenis penunjuk kepada aksara. Ini menerangkan output 4 untuk sizeof(foo), kerana ia adalah saiz penuding pada mesin 32-bit.

Mata Tambahan:

  • Tatasusunan tidak mereput kepada penunjuk apabila dihantar ke saiz. Ini menerangkan output 2 untuk sizeof(bar), kerana bar ialah tatasusunan aksara malar.
  • Jenis hujah literal rentetan kepada sizeof mempengaruhi keputusan. Sebagai contoh, sizeof("foo" 1) akan mengembalikan 4 pada kedua-dua mesin 32-bit dan 64-bit kerana operan ialah ungkapan jenis const char*.

Atas ialah kandungan terperinci Mengapakah `sizeof` Menghasilkan Keputusan Berbeza untuk Huruf Rentetan, Penunjuk dan Tatasusunan Aksara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn