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<
}
int fun(char p[100])
{
return sizeof(p);
}
---------------------------------------------------
/*C/C++中不能传数组,只能传指针,所以任何数组都会隐式转成指针形式进行操作,所以"类型"还是指针而矣.那形参中的大小100有没有用呢?没有.如果有的话,那很多时候还需要加个数组的维数参数干什么呢,是吧. */
}
strlen就简单些了,但要搞清楚它的本质,它是一个函数,参数是const char*,搞清楚它的实现,就是碰到'\0'(字符串结尾,就停止计数,但不包括'\0'.所以它不是看类型而是看变量,看变量赋的什么值.