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. 这里返回的结果是编译器自己设置的。
#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) |