1. The result type of the sizeof operator is size_t. In the header file, typedef is of the unsigned int type. This type ensures that it can accommodate the maximum object size.
2. sizeof is an operator (C ++ keyword) and strlen is a function.
3. sizeof can be a type parameter. strlen can only be a char * parameter and must end with "\ 0. Sizeof can also be used as a parameter using a function, for example:
short f();printf("%d\n", sizeof(f()));
The output result is the size of the type of the returned value, that is, sizeof (short) = 2.
4. the sizeof parameter of the array is not degraded. If it is passed to strlen, It is degraded to a pointer. Most compilation programs calculate sizeof during compilation, which is the type or variable length. This is why sizeof (x) can be used to define the array dimension.
char str[20]="0123456789";int a=strlen(str); //a=10;int b=sizeof(str); //b=20;
The strlen result can be calculated only when it is running. It is used to calculate the string length, not the memory size occupied by the type.
5. If sizeof is a type, you must add an arc. If it is a variable name, you can do not add an arc. This is because sizeof is an operator and not a function.
6. When a structure type or variable is applied, sizeof returns the actual size. When a static space array is applied, sizeof obtains the size of all arrays. The sizeof operator cannot return the size of the dynamically assigned array or external array.
7. When an array is passed as a parameter to a function, the pointer instead of an array is passed, and the first address of the array is passed, for example:
fun(char [8])fun(char [])
It is equivalent to fun (char *).
In C ++, passing an array by parameters is always a pointer to the first element of the array. The Compiler does not know the size of the array. If you want to know the size of the array in the function, you need to do this:
After entering the function, copy it with memcpy. The length is passed in by another parameter.
fun(unsiged char *p1, int len){unsigned char* buf = new unsigned char[len+1] memcpy(buf, p1, len);}
If sizeof is a pointer, the result is of the corresponding type:
char* ss = "0123456789";sizeof(ss)
The result is 4 => ss is the character pointer pointing to a String constant. sizeof obtains the space occupied by a pointer. It should be a long integer, so it is 4. sizeof (* ss) Result 1, => * ss is the first character. In fact, it obtains the memory space occupied by the first "0" of the string, which is of the char type, occupies 1 byte, strlen (ss) = 10 >>>> if you want to obtain the length of this string, you must use strlen.