关于sizeof
注意sizeof是运算符,而非函数
关于sizeof的两个精巧的宏实现。
非数组的sizeof:
#define _sizeof(T) ( (size_t)((T*)0 + 1))
数组的sizeof:
#define array_sizeof(T) ( (size_t)(&T+1) - (size_t)(&T) )
原理就是c/c++中的指针运算。
测试代码:
printf("%d\n",strlen("\0"));
printf("sizeof(0) === %d\n",sizeof("\0"));
printf("sizeof('0') === %d\n",sizeof('\0'));
printf("\n**************************************\n");
printf("sizeof('a') === %d\n",sizeof('a'));
printf("sizeof('abc') === %d\n",sizeof('abc'));
printf("sizeof('abcd') === %d\n",sizeof('abcd'));
printf("\n**************************************\n");
const char str[] = "abcdefghijklmnopqrst";
char* pHead = new char[100];
size_t lenstr = sizeof(str);
size_t lenpHead = sizeof(pHead);
printf("%d\n", lenstr);
printf("%d\n", lenpHead);
printf("\n**************************************\n");
short f();
printf("sizeof(f()) ==== %d\n", sizeof(f()));
int ff();
printf("sizeof(ff()) ==== %d\n", sizeof(ff()));
关于strlen的实现
size_t strlen(const char* pSrc)
{
size_t ret = 0;
if (NULL == pSrc)
{
return ret;
}
while (*pSrc++)
{
ret++;
}
return ret;
}