sizeof是一个运算符,其类型结果为size_t,可以用类型做参数,比如在定义一个结构体之后,获得结构体空间大小sizeof(struct )。并且最重要的是sizeof返回的是变量、结构等的实际大小,并且在计算结构体时要注意对其问题。
strlen首先是一个函数,只能以char * 做参数,返回的是字符的实际长度,不是类型占内存的大小。其结果是运行的时候才计算出来的。
例子:
1、 char * s = “0987654321”;
那么sizeof(s)是多少?sizeof(*s)呢?strlen(s)呢?
sizeof(s)结果为4,因为s是指向char类型的指针。
sizeof(*s)结果为1,可以简单看为char(*s)。
strlen(s)结果为10.为实际字符串长度。
2、int a[100] = {1,2,3};
那么sizeof(a)是多少?strlen(a)呢?
sizeof(a)结果为400. 100*4.
strlen(a)结果为1(用gcc编译测试的,可能是因为
只能以char * 做参数把)
3、
(注意下面static在c++中才行,在c中编译出错)
class A class B
{ {
public: public:
int a; double a;
static int b; float b;
int c;
A(); char d;
~A(); B();
}; ~B();
};
那么sizeof(A)和sizeof(B)结果为多少?
根据之前的分析可以很容易得出sizeof(A)结果为8字节,如果这么想就错了!!!!!!这里的int b是静态变量,那么静态变量存放在哪里?静态变量存放在数据段,而sizeof计算的是栈中大小,所以sizeof(A)结果为4字节.
类B以8字节对齐,结果为24字节。
4、
-
int test(char t[11])
-
{
-
return sizeof(t);
-
}
-
int main()
-
{
-
char te="testtest";
-
printf("size:%d",test(te));
-
}
其结果为多少?这里的t[11]已经转换为*t了,所以结果为4字节。
5.内存对齐问题,比较多,看另一个帖子吧
http://blog.chinaunix.net/uid-29235952-id-4110857.html
阅读(361) | 评论(0) | 转发(0) |