C语言中typedef和sizeof的注意事项
2021-06-29 14:07
标签:变化 增加 统一 splay 默认 struct [] 定义 去掉 typedef的作用是给一个数据类型起一个别名。 SeqList 就相当于struct LIST,它具有定义变量的能力,和int,char的作用类似。 而 SeqList2就是一个变量,和int a;里面的a的性质差不多。 当我们为结构体指针申请空间的时候,通常malloc里面会使用sizeof运算符。那么,sizeof里面应该写SeqList还是SeqList2呢? 我们不妨退一步想,为一个数组指针申请空间的时候,我们在sizeof里面写的是int,说明里面填写一个数据类型是不会错的,所有使用malloc(sizeof(SeqList))是不会错的。 但是,有时候,我们写malloc((SeqList2)),运行的结果也是正确的,先看示例: 运行结果: 说明两者申请到的空间是一样的,说明在这个程序中,SeqList和SeqList2的作用效果是一样的。下面研究一下sizeof。 运行结果: 哎?这两个东西大小是一样的! 噢,原来sizeof计算的是对象所占的字节数。SeqList是一个数据类型,它默认占的字节数是4;而SeqList2是一个由SeqList数据类型定义的一个变量,它所占的字节数依旧是4。 那么这意味着我们以后使用其中的任何一个就可以了吗? 这次我们试验一下,用SeqList数据类型定义一个结构体数组,看看会发生什么变化: 运行结果: 看看,不一样了吧,原因是这个变量现在是一个数组,里面有两个元素,所占的字节数也增加了一倍,所以不是所有情况都可以混用的。 sizeof里面最好还是统一使用数据类型比较放心。 如果还不熟悉typedef的具体作用或者不信服,下面在通过打印两者的值看看有什么不同: 现在编译 噢,出问题了,看看哪里有问题?问题出在了SeqList上,前面说过,它是一个数据类型,不是变量,所以打印一个数据类型(和打印一个int相同),是有些荒谬的! 我们去掉这一句,看看有什么变化: 运行结果: 编译通过了!说明SeqList确实是一个数据类型,而SeqList2是一个变量,并且系统给它初始化的值为0. C语言中typedef和sizeof的注意事项 标签:变化 增加 统一 splay 默认 struct [] 定义 去掉 原文地址:https://www.cnblogs.com/zhaijiayu/p/9645982.htmltypedef struct LIST {
int data;
}SeqList;
struct LIST{
int data;
}SeqList2;
#include
sizeof(L) = 8
sizeof(L2) = 8
#include
sizeof(SeqList) = 4
sizeof(SeqList2) = 4
#include
sizeof(SeqList) = 4
sizeof(SeqList2) = 8
#include
C:\Users\zhaijiayu\code\data structure>gcc a.c
a.c: In function ‘main‘:
a.c:23:29: error: expected expression before ‘SeqList‘
printf("SeqList = %d\n",SeqList);
^
#include
sizeof(SeqList) = 4
sizeof(SeqList2) = 4
SeqList2 = 0
上一篇:算法——堆的简单介绍