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?
 
     
     
    