Berapa ukuran karakter dalam C dan C ++? Sejauh yang saya tahu ukuran char adalah 1 byte di C dan C ++.
#include <stdio.h>
int main()
{
printf("Size of char : %d\n", sizeof(char));
return 0;
}
#include <iostream>
int main()
{
std::cout << "Size of char : " << sizeof(char) << "\n";
return 0;
}
Tidak ada kejutan, keduanya memberikan output: Size of char : 1
Sekarang kita tahu bahwa karakter yang direpresentasikan sebagai 'a'
, 'b'
, 'c'
, '|'
, ... Jadi saya hanya memodifikasi kode di atas dengan ini:
Dalam C:
#include <stdio.h>
int main()
{
char a = 'a';
printf("Size of char : %d\n", sizeof(a));
printf("Size of char : %d\n", sizeof('a'));
return 0;
}
Size of char : 1
Size of char : 4
Dalam C ++:
#include <iostream>
int main()
{
char a = 'a';
std::cout << "Size of char : " << sizeof(a) << "\n";
std::cout << "Size of char : " << sizeof('a') << "\n";
return 0;
}
Size of char : 1
Size of char : 1
Mengapa sizeof('a')
mengembalikan nilai yang berbeda dalam C dan C ++?
"%|"
Format membutuhkanint
argumen (atau sesuatu yang mempromosikan keint
).sizeof
menghasilkan hasil dari tipesize_t
. Baik dikonversi menjadiint
menggunakan gips atau, jika implementasi Anda mendukungnya, gunakan"%zu"
.Jawaban:
Dalam C, jenis karakter seperti konstan
'a'
sebenarnya adalahint
, dengan ukuran 4 (atau nilai implementasi-tergantung lainnya). Dalam C ++, tipenya adalahchar
, dengan ukuran 1. Ini adalah salah satu dari banyak perbedaan kecil antara kedua bahasa.sumber
int
menjadichar
, yang menjelaskan perilaku. :)Seperti yang dikatakan Paul, itu karena
'a'
adalahint
dalam C tetapichar
dalam C ++.Saya membahas perbedaan spesifik antara C dan C ++ dalam sesuatu yang saya tulis beberapa tahun yang lalu, di: http://david.tribble.com/text/cdiffs.htm
sumber
Dalam C tipe literal karakter adalah int dan char dalam C ++. Ini dalam C ++ diperlukan untuk mendukung fungsi yang berlebihan . Lihat contoh ini:
Keluaran:
sumber
Dalam bahasa C , karakter literal bukan
char
tipe. C menganggap karakter literal sebagai integer. Jadi, tidak ada perbedaan antarasizeof('a')
dansizeof(1)
.Jadi, ukuran literal karakter sama dengan sizeof integer dalam C.
Dalam bahasa C ++ , karakter literal adalah tipe
char
. The cppreference mengatakan ini:Jadi, dalam karakter C ++ literal adalah tipe
char
. jadi, ukuran literal karakter dalam C ++ adalah satu byte.Alos, Dalam program Anda, Anda telah menggunakan penentu format yang salah untuk
sizeof
operator.C11 §7.21.6.1 (P9):
Jadi, Anda harus menggunakan
%zu
penentu format alih-alih%d
, jika tidak maka perilaku tidak ditentukan dalam C.sumber
%zu
tidak didukung pada banyak platform, tetapi portabilitas, penggunaan,(int)sizeof(char)
dan format yang lebih baik%d
char
jenisnya ditandatangani atau tidak ditandatangani secara default.