
结构体初始化时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));
谢谢 展开
①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));
谢谢 展开
展开全部
第一种方式定义结构体指针必须是
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,就只能用这种方法
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,其实只是初始化了结构体的前四个字节,而不是整个结构体

2025-04-01 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准...
点击进入详情页
本回答由Sievers分析仪提供
展开全部
memset(pStu ,0,sizeof(pStu));这种不对 sizeof(pStu)为4.
memset(pStu ,0,sizeof(student));
memset(pStu ,0,sizeof( struct student));
这两种应该都行。
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了,那不叫初始化。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sizeof 的作用时间 是编译器并非运行期, 编译器 根据你的代码解释 student* pStu = NULL;,sizeof(pStu)等价于计算sizeof(student*) 其实就是指针大小,其实只要记住
Type t sizeof(t) 等价于sizeof(Type) 是计算变量的类型大小.
Type t sizeof(t) 等价于sizeof(Type) 是计算变量的类型大小.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询