Chinaunix首页 | 论坛 | 博客
  • 博客访问: 494584
  • 博文数量: 144
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1190
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-08 20:16
文章分类

全部博文(144)

文章存档

2017年(1)

2015年(5)

2014年(108)

2013年(30)

我的朋友

分类: C/C++

2014-04-26 10:54:32

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、

点击(此处)折叠或打开

  1. int test(char t[11])
  2. {
  3.   return sizeof(t);
  4. }
  5. int main()
  6. {
  7.  char te="testtest";
  8.   printf("size:%d",test(te));
  9. }


其结果为多少?这里的t[11]已经转换为*t了,所以结果为4字节。

5.内存对齐问题,比较多,看另一个帖子吧
http://blog.chinaunix.net/uid-29235952-id-4110857.html
阅读(369) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~