Chinaunix首页 | 论坛 | 博客
  • 博客访问: 36146
  • 博文数量: 7
  • 博客积分: 255
  • 博客等级: 二等列兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-30 10:38
文章分类

全部博文(7)

文章存档

2011年(1)

2010年(6)

我的朋友

分类: C/C++

2010-09-27 15:02:33

1、sizeof到底是什么:sizeof是一元运算符(Unary operator)
   语法规则如下:

sizeof unary-expression
sizeof ( type-name )

 
2、sizeof与结构体和联合体:

struct test {
    char c;
    int a;
    double d;
};

当时我认为所占的空间是:13(这个结果肯定是不对的!)。
其实用sizeof算出来的值是:16(微软的编译器、gcc的结果)这里面存在着一个内存对齐的问题:
我要弄清楚的就是为什么要对齐、怎么对齐。
 
3、sizeof的返回值:
这是个让我心痛到永远的问题。因为我犯过错在这个问题上!

#include<stdio.h>


int main()
{
    int i;
    int arr[10] = {1,2,3,4,5,6,7,8,9,0};

    if (sizeof(arr) > -1) {
        printf("unsigned > int\n");
    } else {
        printf("int > unsigned\n");
    }
    return 0;
}

结果是:int > unsigned。其实原因很简单。sizeof的结果是一个unsigned类型的整数。
 
4、sizeof与形参:其实这个问题和sizeof没有太大的关联。列在这里是为了自己更好的记住。
先看看一个简单的示例:

#include<stdio.h>
void func(char *s) {
    printf("the size of the pointer:%u\n", sizeof(s));
}
int main()
{
    char str[20] = "hello the world!";
    printf("the size of the str :%u\n", sizeof str);
    func(str);
    return 0;
}

main中是20,func中是2。这个里面关键是参数的传递。数组类型-->指针类型了。这里就不多说了。要了解的可以网上查查资料。

5、sizeof('a')的秘密:在gcc和微软的编译器下测试都是4. 这里返回的结果是编译器自己设置的。

6、自己实现的sizeof功能的代码:
 

#define sizeof_v(value) (size_t)((char *)(&(value) + 1) - (char *)(&(value)))
#define sizeof_t(type) ((size_t)((type *)0 + 1))


很明显没有什么健壮性可言。我在glibc中查找:#define sizeof没有结果。哪位大侠知道在那个文件里面通知我一下。我真的很想看看到底怎么实现的。我的邮箱:。
阅读(1341) | 评论(1) | 转发(0) |
0

上一篇:C语言的声明

下一篇:双向链表

给主人留下些什么吧!~~

chinaunix网友2010-09-29 20:02:33

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com