结构体初始化时sizeof()问题

结构体的两种定义形式①structstudent{intID;charname[128];};②typedefstructstudent{intnum;charname[... 结构体的两种定义形式
①struct student
{
int ID;
char name[128];
};

typedef struct student
{
int num;
char name[128];
}student;

对于上面两种定义形式
student* pStu = NULL; //这种定义结构体指针的方式都正确么?
pStu = ***; //有指向
memset(pStu ,0,sizeof(pStu)); //sizeof中得内容不对是吧?
// 下面两种对么?两种定义方法初始化时sizeof里不一样么?
memset(pStu ,0,sizeof(student));
memset(pStu ,0,sizeof( struct student));

谢谢
展开
 我来答
ducky8688
2012-07-30 · TA获得超过753个赞
知道小有建树答主
回答量:241
采纳率:100%
帮助的人:107万
展开全部
第一种方式定义结构体指针必须是
struct student * pStu = NULL;

第二种方式才可以使用
student * pStu=NULL;

当pStu是指针时,sizeof(pStu);的大小是 4(32位操作系统) 或者 8(64位操作系统),因为他的类似是指针,所有的指针,本质上都是一个整数,所以不管是什么类似的指针的sizeof的值都是一样的

一个结构体型的应该是包含 struct 关键字和 结构体名的,如你这个例子
typedef struct student student;
只是相当于告诉编译器 student 就是 struct student,编译器编译的时候会自动把他当成sturct student, 因此当你的结构体定义使用了typedef 的时候才能直接使用student当成结构体类型

memset(pStu ,0,sizeof(student)); // 当你使用了typedef struct student student;时,这句话才是对的
memset(pStu ,0,sizeof( struct student)); //如果你没有使用typedef,就只能用这种方法
更多追问追答
追问
试了一下,结构体指针的定义和初始化时,貌似两种用法都可以,也不报错,结构也正确,是说可以这么用只是不规范,所以不建议用,还是?
追答
不规范,因为memset的第三个参数是你要初始化的内存大小,如果sizeof的是一个指针,那么sizeof的值是4,其实只是初始化了结构体的前四个字节,而不是整个结构体
Sievers分析仪
2025-04-01 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准... 点击进入详情页
本回答由Sievers分析仪提供
人工智能研习社
2012-07-30 · TA获得超过237个赞
知道小有建树答主
回答量:216
采纳率:0%
帮助的人:248万
展开全部
memset(pStu ,0,sizeof(pStu));这种不对 sizeof(pStu)为4.

memset(pStu ,0,sizeof(student));
memset(pStu ,0,sizeof( struct student));
这两种应该都行。
更多追问追答
追问
我试的结果也是貌似两种都可以,但是有一个问题就是我sizeof(point)时,会把结构体的第一个成员初始化,不知道是为什么?
追答
sizeof(point)为4个字节,你第一个成员也是4个字节,memset(pStu ,0,sizeof(pStu));就是把前四个字节设置为0,就是把ID赋值为0了,那不叫初始化。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xunxunnuaa
2012-07-30 · TA获得超过651个赞
知道小有建树答主
回答量:548
采纳率:0%
帮助的人:457万
展开全部
sizeof 的作用时间 是编译器并非运行期, 编译器 根据你的代码解释 student* pStu = NULL;,sizeof(pStu)等价于计算sizeof(student*) 其实就是指针大小,其实只要记住
Type t sizeof(t) 等价于sizeof(Type) 是计算变量的类型大小.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式