What is the size of character in C and C++ ? As far as I know the size of char is 1 byte in both C and 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;
}
No surprises, both of them gives the output : Size of char : 1
Now we know that characters are represented as 'a'
,'b'
,'c'
,'|'
,... So I just modified the above codes to these:
In 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
In 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
Why the sizeof('a')
returns different values in C and C++?
As Paul stated, it's because
'a'
is anint
in C but achar
in C++.I cover that specific difference between C and C++ in something I wrote a few years ago, at: http://david.tribble.com/text/cdiffs.htm
In C the type of character literals are int and char in C++. This is in C++ required to support function overloading. See this example:
Output:
In C, the type of a character constant like
'a'
is actually anint
, with size of 4 (or some other implementation-dependent value). In C++, the type ischar
, with size of 1. This is one of many small differences between the two languages.In C language, character literal is not a
char
type. C considers character literal as integer. So, there is no difference betweensizeof('a')
andsizeof(1)
.So, the sizeof character literal is equal to sizeof integer in C.
In C++ language, character literal is type of
char
. The cppreference say's:So, in C++ character literal is a type of
char
. so, size of character literal in C++ is one byte.Alos, In your programs, you have used wrong format specifier for
sizeof
operator.C11 §7.21.6.1 (P9) :
So, you should use
%zu
format specifier instead of%d
, otherwise it is undefined behaviour in C.