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?