文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>c sizeof

c sizeof

时间:2010-09-27  来源:camel_flying

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没有结果。哪位大侠知道在那个文件里面通知我一下。我真的很想看看到底怎么实现的。我的邮箱:[email protected]
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载