Size of char[]
is number of char times sizeof(char)
,
size of char*
is sizeof(pointer)
- Pointer to first element.
sizeof(char[])
prints number of char times sizeof(char)
in main()
, where it's declared, but if I pass this array to function, it function converts char[]
to char*
and it's imposibble to get size of array using sizeof()
,
"void pr(char chr[])" is changed to "void pr(char chr*)"
Code example:
using namespace std;
void pr(char chr[])
{
std::cout << "in pr(): " << sizeof(chr)<<"\n";
}
int main()
{
char* c;
char z[] = { 1,2,3,4,5,6,7,8,9};
c = z;
std::cout << "sizeof char* c in main(): " << sizeof(c) << "\n";
std::cout << "sizeof char* c "; pr(c); std::cout << "\n";
std::cout << "sizeof char z[] in main(): " << sizeof(z) << "\n";
std::cout << "sizeof char z[] "; pr(z); std::cout << "\n";
getchar();
return 0;
}
Output:
sizeof char* c in main(): 4 // pointer size
sizeof char* c in pr(): 4 // pointer size
sizeof char z[] in main(): 9 // elements*sizeof(char)
sizeof char z[] in pr(): 4 // pointer s
Is this behavior standardized or its implementation based?