冷饮店冬天怎么办:搞清楚sizeof,strlen吧
不要再小看这些东西了,你认为你真的很清楚那就算了,不过不要等你笔试时几个这样的小题目让你想半天,表达式一混杂,一多,你就昏头了.不行的,不行的,还是看看吧...
sizeof相当于是个宏一样的东西,因为它只是一个运算符,而不是函数,编译时展开为常数,编译的时候有每个变量的定义表,sizeof 通过查表确定变量占用的空间,这是分配内存给process之前要确定的.其实可以简单的理解sizeof是征对"类型"的,而非"变量",但此时不能这样看如:sizeof("HELLO");中括号中为const char *,而是一个"字符串",所以结果大小为5.但:
char *ps = "HELLO";
sizeof(ps) = 4 //只是指针的大小
char as[8];
sizeof(as) = 8 //因为as的类型为char [8],这个大小的确是8
char aa[8][9];
sizeof((char*)aa) = 4 //还是char *
char arr[100] = "HELLO";
sizeof(arr) = 100 //和赋什么值没什么关系,关键是"类型"是什么
int func(char p[100])
{
sizeof(p) = 4;
/*C/C++中不能传数组,只能传指针,所以任何数组都会隐式转成指针形式进行操作,所以"类型"还是指针而矣.那形参中的大小100有没有用呢?没有.如果有的话,那很多时候还需要加个数组的维数参数干什么呢,是吧. */
}
strlen就简单些了,但要搞清楚它的本质,它是一个函数,参数是const char*,搞清楚它的实现,就是碰到‘\0‘(字符串结尾,就停止计数,但不包括‘\0‘.所以它不是看类型而是看变量,看变量赋的什么值.