sizeof,strlen

来源:百度文库 编辑:神马文学网 时间:2024/04/29 22:04:11

不要再小看这些东西了,你认为你真的很清楚那就算了,不过不要等你笔试时几个这样的小题目让你想半天,表达式一混杂,一多,你就昏头了.不行的,不行的,还是看看吧...

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; 

}

-----------------------------------------------------

我把原文的示例改一下,便于阅读,原文也留下。

#include

#include

using namespace std;

int fun(char p[100]);

int main()

{

   char *p="Hello";

   cout<<sizeof(p)<

   char pp[8]={1,2,3};

   cout<<sizeof(pp)<

   char pp1[8][9];

   cout<<sizeof(pp1)<

   cout<<sizeof((char*)pp1)<

   char arr[100]="Hello";

   cout<<sizeof(arr)<

   cout<输出4

}

int fun(char p[100])

{

   return sizeof(p);

}

---------------------------------------------------

/*C/C++中不能传数组,只能传指针,所以任何数组都会隐式转成指针形式进行操作,所以"类型"还是指针而矣.那形参中的大小100有没有用呢?没有.如果有的话,那很多时候还需要加个数组的维数参数干什么呢,是吧. */
}

strlen就简单些了,但要搞清楚它的本质,它是一个函数,参数是const char*,搞清楚它的实现,就是碰到'\0'(字符串结尾,就停止计数,但不包括'\0'.所以它不是看类型而是看变量,看变量赋的什么值.