Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah `sizeof` Berbeza Mengendalikan Huruf Rentetan, Tatasusunan dan Penunjuk dalam C ?

Bagaimanakah `sizeof` Berbeza Mengendalikan Huruf Rentetan, Tatasusunan dan Penunjuk dalam C ?

Linda Hamilton
Linda Hamiltonasal
2024-12-07 09:03:13162semak imbas

How Does `sizeof` Differently Handle String Literals, Arrays, and Pointers in C  ?

Saiz Rentetan Literal: Memahami Jejak Memori Pemalar Rentetan

Dalam C , literal rentetan ialah bahagian penting kod, mewakili jujukan tetap daripada watak. Saiz operator memainkan peranan penting dalam memahami peruntukan memori dan susun atur literal rentetan ini.

Soalan 1: Mengapakah sizeof Mengira Panjang Rentetan Literal?

Apabila digunakan pada rentetan literal, seperti "f", saiz operator mengukur bilangan aksara yang disimpan dalam literal, termasuk nol penamat aksara (' '). Dalam kes "f", ia mengira ruang yang diperlukan untuk menyimpan dua aksara, kerana ia termasuk kedua-dua 'f' dan penamat nol.

Soalan 2: Adakah String Literal Mempunyai Berbeza Taipkan apabila Diberikan kepada sizeof?

Tersurat rentetan mempunyai jenis yang berbeza: susunan aksara dengan saiz yang diketahui, di mana saiznya termasuk penamat null. Jenis ini berbeza daripada char* (penunjuk kepada aksara) dan char[] (susun aksara). Apabila dihantar ke sizeof, jenis tatasusunan rentetan literal dikekalkan, membawa kepada hasil yang mencerminkan saiz tatasusunan dan bukannya saiz penunjuk.

Mengapa sizeof Mengembalikan Nilai Berbeza untuk Rentetan Literal , Tatasusunan dan Penunjuk?

  • sizeof("f"): Mengembalikan 2, kerana ia mengukur saiz tatasusunan aksara yang mengandungi 'f' dan ' '.
  • sizeof(foo): Mengembalikan 4 (pada sistem 32-bit) atau 8 (pada sistem 64-bit), kerana ia mengukur saiz pembolehubah penuding foo yang memegang alamat rentetan literal.
  • sizeof(bar): Mengembalikan 2, kerana ia mengukur saiz tatasusunan daripada aksara yang mengandungi 'b' dan ' '.

Ingat:

  • Rentetan literal mempunyai jenis: tatasusunan saiz N const char (di mana N termasuk penamat nol).
  • Susun atur tidak mereput kepada penunjuk apabila dihantar ke saiz.

Atas ialah kandungan terperinci Bagaimanakah `sizeof` Berbeza Mengendalikan Huruf Rentetan, Tatasusunan dan Penunjuk dalam C ?. 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