C的结构体使用方法里可不可以添加方法?

c语言 结构体的动态分配问题? - 知乎20被浏览1044分享邀请回答void tInit(test **ppt)
*ppt = (test*)malloc(...
test *pt = NULL;
tInit(&pt); // 这才能改变 pt 的值
133 条评论分享收藏感谢收起21 条评论分享收藏感谢收起查看更多回答21ic官方微信-->
后使用快捷导航没有帐号?
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
请完成以下验证码
查看: 5794|回复: 51
C语言结构体(struct)常见使用方法
&&已结帖(0)
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。
结构体定义:第一种:只有结构体定义struct stuff{
& && &&&char job[20];
& && &&&
& && &&&
};复制代码
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义
//直接带变量名Huqinwei
struct stuff{
& && &&&char job[20];
& && &&&
& && &&&
}H复制代码
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
也许初期看不习惯容易困惑,其实这就相当于:
struct stuff{
& && &&&char job[20];
& && &&&
& && &&&
};
struct stuff H
复制代码
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
第三种:如果该结构体你只用一个变量Huqinwei,而不再需要用
去定义第二个变量。那么,附加变量初始化的结构体定义还可进一步简化出第三种:struct{
& && &&&char job[20];
& && &&&
& && &&&
}H复制代码把结构体名称去掉,这样更简洁,不过也不能定义其他同结构体变量了——至少我现在没掌握这种方法。
结构体变量及其内部成员变量的定义及访问:
绕口吧?要分清结构体变量和结构体内部成员变量的概念。
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
本帖最后由 dongnanxibei 于
18:24 编辑
就像刚才的第二种提到的,结构体变量的声明可以用:
其成员变量的定义可以随声明进行:
struct stuff Huqinwei = {&manager&,30,185};&&
也可以考虑结构体之间的赋值:
struct stuff faker = H复制代码如果不使用上边两种方法,那么成员数组的操作会稍微麻烦(用for循环可能好点)
& && &&&Huqinwei.job[0] = 'M';
& && &&&Huqinwei.job[1] = 'a';
& && &&&Huqinwei.age = 27;
& && &&&Huqinwei.height = 185;
复制代码
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
结构体成员变量的访问除了可以借助符号&.&,还可以用&-&&访问(下边会提)。
引用(C++)、指针和数组:
首先是引用和指针:int main()
{
& && &&&struct stuff H
& && &&&struct stuff &ref = H
& && &&&ref.age = 100;
& && &&&printf(&Huqinwei.age is %d\n&,Huqinwei.age);
& && &&&printf(&ref.age is %d\n&,ref.age);
& && &&&struct stuff *ptr = &H
& && &&&ptr-&age = 200;
& && &&&printf(&Huqinwei.age is %d\n&,Huqinwei.age);
& && &&&printf(&ptr-&age is %d\n&,Huqinwei.age);
//既然都写了,把指针引用也加上吧
& && &&&struct stuff *&refToPtr =
& && &&&refToPtr-&age = 300;
& && &&&printf(&Huqinwei.age is %d\n&,Huqinwei.age);
& && &&&printf(&refToPtr-&age is %d\n&,refToPtr-&age);
}
复制代码更正:之前给引用的初始化语句写错了,而且没注明引用是纯C中没有的东西(在这么个以C为幌子的博客中)。引用是C++特有的一个机制,必须靠编译器支撑,至于引用转换到C中本质是什么,我有个帖子写过结构体也不能免俗,必须有数组:struct test{
& && &&&int a[3];
& && &&&
};
//对于数组和变量同时存在的情况,有如下定义方法:
& && &&&struct test student[3] =& && &{{{66,77,55},0},
& && && && && && && && && && && && && & {{44,65,33},0},
& && && && && && && && && && && && && & {{46,99,77},0}};
//特别的,可以简化成:
& && &&&struct test student[3] =& && & {{66,77,55,0},
& && && && && && && && && && && && && & {44,65,33,0},
& && && && && && && && && && && && && & {46,99,77,0}};
复制代码
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
变长结构体可以变长的数组#include &stdio.h&
#include &malloc.h&
#include &string.h&
typedef struct changeable{
& && &&&int iC
& && &&&char pc[0];
}
main(){
& && &&&printf(&size of struct changeable : %d\n&,sizeof(schangeable));
& && &&&schangeable *pchangeable = (schangeable *)malloc(sizeof(schangeable) + 10*sizeof(char));
& && &&&printf(&size of pchangeable : %d\n&,sizeof(pchangeable));
& && &&&schangeable *pchangeable2 = (schangeable *)malloc(sizeof(schangeable) + 20*sizeof(char));
& && &&&pchangeable2-&iCnt = 20;
& && &&&printf(&pchangeable2-&iCnt : %d\n&,pchangeable2-&iCnt);
& && &&&strncpy(pchangeable2-&pc,&hello world&,11);
& && &&&printf(&%s\n&,pchangeable2-&pc);
& && &&&printf(&size of pchangeable2 : %d\n&,sizeof(pchangeable2));
}复制代码运行结果size of struct changeable : 4
size of pchangeable : 4
pchangeable2-&iCnt : 20
hello world
size of pchangeable2 : 4复制代码结构体本身长度就是一个int长度(这个int值通常只为了表示后边的数组长度),后边的数组长度不计算在内,但是该数组可以直接使用。(说后边是个指针吧?指针也占长度!这个是不占的!原理很简单,这个东西完全是数组后边的尾巴,malloc开辟的是一片连续空间。其实这不应该算一个机制,感觉应该更像一个技巧吧)
可变长度的结构体个人比较反对使用,特别是在项目上,因为这个通过指针来申请还是可以的,如果是变量的话是非常危险的,因为后面的变量会覆&
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
非弹性数组不能用&char a[]&这种形式定义弹性(flexible)变量,必须明确大小。弹性数组在结构体中,下面的形式是唯一允许的:struct s
{
& && &&&
& && &&&char b[] ;
};复制代码顺序颠倒会让b和a数据重合,会在编译时不通过。char b[] = &hell&;也不行(C和C++都不行)
少了整型变量a又会让整个结构体长度为0,compiler不允许编译通过!不同的是,其实C++形式上是允许空结构体的,本质上是通过机制避免了纯空结构体和类对象,自动给空结构体对象分配一个字节(sizeof()返回1)方便区分对象,避免地址重合!所以呢,C如果有空结构体,定义两个(或一打,或干脆一个数组)该结构体的变量(对象),地址是完全一样的!·!!!!!!!!调试看程序运行,这些语句其实都被当屁放了,根本没有运行,没有实际意义,C压根不支持空结构体这种东西(或者说我也没想好什么场合有用)struct s2
{
//& && &char a[]&&= &hasd& ;
//& && &
};
int main()
{
& && &&&struct s2 s22;
& && &&&struct s2 s23;
& && &&&struct s2 s24;
& && &&&struct s2 s25;
}
复制代码
哦,原来这里有说明上面的问题,哈哈哈,&
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
例外的是,C++唯独不给带弹性数组的结构体分配空间(可能怕和变长结构体机制产生某种冲突,比如大小怎么算):
struct s
{
& && &&&char b[] ;
};复制代码struct s
{
//& && &&&char b[] ;
};复制代码C++中两者是不一样的,空的结构体反而“大”(sizeof()返回1)
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
这个机制利用了一个非常重要的特性——数组和指针的区别!数组和指针在很多操作上是一样的,但是本质不一样。最直观的,指针可以改指向,数组不可以,因为数组占用的每一个内存地址都用来保存变量或者对象,而指针占用的内存地址保存的是一个地址,数组没有单独的保存指向地址的这样一个结构。数组的位置是固定的,正如指针变量自身的位置也是固定的,改的是指针的值,是指向的目标地址,而因为数组不存储目标地址,所以改不了指向。企图把地址强制赋值给数组的话,也只是说把指针赋值给数组,类型不兼容。
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
结构体嵌套:结构体嵌套其实没有太意外的东西,只要遵循一定规律即可://对于“一锤子买卖”,只对最终的结构体变量感兴趣,其中A、B也可删,不过最好带着
struct A{
& && &&&struct B{
& && && && &
& && &&&}
& && &&&b;
}
a;
//使用如下方式访问:
a.b.c = 10;
复制代码特别的,可以一边定义结构体B,一边就使用上:struct A{
& && &&&struct B{
& && && && && &
& && &&&}b;
& && &&&struct B
}a;
复制代码使用方法与测试:& && &&&a.b.c = 11;
& && &&&printf(&%d\n&,a.b.c);
& && &&&a.sb.c = 22;
& && &&&printf(&%d\n&,a.sb.c);
结果无误。 复制代码
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
但是如果嵌套的结构体B是在A内部才声明的,并且没定义一个对应的对象实体b,这个结构体B的大小还是不算进结构体A中。
结构体与函数:
关于传参,首先:void func(int);
func(a.b.c);复制代码把结构体中的int成员变量当做和普通int变量一样的东西来使用,是不用脑子就想到的一种方法。
另外两种就是传递副本和指针了 ://struct A定义同上
//设立了两个函数,分别传递struct A结构体和其指针。
void func1(struct A a){
& && &&&printf(&%d\n&,a.b.c);
}
void func2(struct A* a){
& && &&&printf(&%d\n&,a-&b.c);
}
main(){
& && &&&a.b.c = 112;
& && &&&struct A *
& && &&&pa = &a;
& && &&&func1(a);
& && &&&func2(&a);
& && &&&func2(pa);
}
复制代码
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
占用内存空间:struct结构体,在结构体定义的时候不能申请内存空间,不过如果是结构体变量,声明的时候就可以分配——两者关系就像C++的类与对象,对象才分配内存(不过严格讲,作为代码段,结构体定义部分“.text”真的就不占空间了么?当然,这是另外一个范畴的话题)。
结构体的大小通常(只是通常)是结构体所含变量大小的总和,下面打印输出上述结构体的size:& && &&&printf(&size of struct man:%d\n&,sizeof(struct man));
& && &&&printf(&size:%d\n&,sizeof(Huqinwei));
结果毫无悬念,都是28:分别是char数组20,int变量4,浮点变量4. 复制代码
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
下边说说不通常:对于结构体中比较小的成员,可能会被强行对齐,造成空间的空置,这和读取内存的机制有关,为了效率。通常32位机按4字节对齐,小于的都当4字节,有连续小于4字节的,可以不着急对齐,等到凑够了整,加上下一个元素超出一个对齐位置,才开始调整,比如3+2或者1+4,后者都需要另起(下边的结构体大小是8bytes),相关例子就多了,不赘述。struct s
{
}复制代码相应的,64位机按8字节对齐。不过对齐不是绝对的,用#pragma pack()可以修改对齐,如果改成1,结构体大小就是实实在在的成员变量大小的总和了。和C++的类不一样,结构体不可以给结构体内部变量初始化,。
如下,为错误示范:#include&stdio.h&
//直接带变量名Huqinwei
struct stuff{
//& && &char job[20] = &Programmer&;
//& && &char job[];
//& && &int age = 27;
//& && &float height = 185;
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.01
主题帖子积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
中级工程师, 积分 3673, 距离下一级还需 1327 积分
PS:结构体的声明也要注意位置的,作用域不一样。
C++的结构体变量的声明定义和C有略微不同,说白了就是更“面向对象”风格化,要求更低。
那么熟悉了常用方法,都要注意哪些常犯错误呢,见C语言结构体常见错误。
主题帖子积分
主题帖子积分
专家等级:结帖率:100%打赏:8.80受赏:171.80
主题帖子积分
不错,总结的很好!
主题帖子积分
资深工程师, 积分 10588, 距离下一级还需 9412 积分
资深工程师, 积分 10588, 距离下一级还需 9412 积分
主题帖子积分
专家等级:结帖率:100%打赏:241.12受赏:445.38
主题帖子积分
资深工程师, 积分 10588, 距离下一级还需 9412 积分
资深工程师, 积分 10588, 距离下一级还需 9412 积分
好东西 赞一个~
物致DIY 期待您的到来~
QQ群:& &&&微信公众号:智物知心致成
主题帖子积分
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
主题帖子积分
专家等级:结帖率:0%打赏:0.00受赏:5.00
主题帖子积分
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
结构体确实是一个很好的东西,能看懂,自己还没有用过
主题帖子积分
高级工程师, 积分 7867, 距离下一级还需 133 积分
高级工程师, 积分 7867, 距离下一级还需 133 积分
主题帖子积分
专家等级:结帖率:91%
主题帖子积分
高级工程师, 积分 7867, 距离下一级还需 133 积分
高级工程师, 积分 7867, 距离下一级还需 133 积分
楼主,除了pc[0] 这种外,还有匿名结构体也经常见。还有就是结构体内的位域。
我把C# 7.0新支持的一些结构体的东西也可以给大家分享一下。指定成员初始化就不说了,说个返回结构体的。可以用来返回两个量哦,而且结构体类型还不用定义。
(int x,int y) fun1(int a)
& & return (a,a);
var v = fun1(3);
if(v.x==3)
I find it amusing that you didn't even consider a third reason for the problem was an error on your part.
主题帖子积分
助理工程师, 积分 1957, 距离下一级还需 43 积分
助理工程师, 积分 1957, 距离下一级还需 43 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
助理工程师, 积分 1957, 距离下一级还需 43 积分
助理工程师, 积分 1957, 距离下一级还需 43 积分
数组的位置是固定的,不存储目标地址
技术奇才奖章
人才类勋章
时间类勋章
精英会员奖章
等级类勋章
坚毅之洋流
发帖类勋章
技术导师奖章
人才类勋章
时间类勋章
沉静之湖泊
发帖类勋章
无冕之王奖章
等级类勋章&本文摘自于/bigrabbit/archive//2695543.html, 感谢博主:piraterabbit的知识分享与付出!(自己添加了部分内容)
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为&位域&或&位段&。所谓&位域&是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。
位段的声明和普通的结构体成员声明还是有一些区别的,区别如下:
1、位段成员必须声明为int、unsigned int或signed int类型;
2、在成员名的后面是一个冒号和一个整数,这个整数指定该位段所占用的位的数目。
一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:&
struct 位域结构名
其中位域列表的形式为:
类型说明符 位域名:位域长度
位域变量的说明与结构变量说明的方式相同。 可采用先定义后说明,同时定义说明或者直接说明这三种方式。例如:struct bs {   int a:8;   int b:2;   int c:6; }
说明data为bs变量,共占两个字节。其中位域a占8位,位域b占2位,位域c占6位。对于位域的定义尚有以下几点说明:
1. 一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。例如:
unsigned a:4
unsigned b:5 /*从下一单元开始存放*/ //因为一个字节有8位,a占用了第一个字节的前4位,后4位为空,但b是5位,若全部存放在a的后4位,则空间不够,所以,从下一个字节开始存放
unsigned c:4 }
所以,a占用了一个字节,b占用了一个字节,c也占用了一个字节,其实只要将b和c的位置换一换,将只需要占用两个字节。
2. 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度。
3. 位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的。例如:
struct k {
int :2  /*无位域名,该2位不能使用*/
int c:2 };
二、位域的使用下面例子是参加一个公司(白领科技-青岛)的笔试遇到的,当时做错了,为了怕忘了,赶紧写下来。
struct A {
int b:3; }; int main(void) {
char str[100] = &afsadfsdlfjlsdjfl&;
memcpy(&d, str, sizeof(A));
cout && d.a &&
cout && d.b &&
return 0; }
解析:上例程序中定义了位域结构A,两个个位域为a(占用5位),b(占用3位),所以a和b总共占用了结构A一个字节(低位的一个字节)。
由于是32位处理器,而且结构体中a和b元素类型均为int(也是4个字节),所以结构体的A占用内存为4个字节。(即结构体所占的字节数必须要被4整除)
当程序运行到14行时,d内存分配情况: 高位 10011
其中d.a和d.b占用d低位一个字节(),d.a : 10000, d.b : 001
d.a内存中二进制表示为10000,由于d.a为有符号的整型变量,输出时要对符号位进行扩展,所以结果为-16(二进制为)d.b内存中二进制表示为001,由于d.b为有符号的整型变量,输出时要对符号位进行扩展,所以结果为1(二进制为)运行结果为:使用位段只是基于方便的目的,任何可以用位段实现的任务都可以使用移位和屏蔽来实现。位段提供的唯一优点是:简化了源代码,当然,这个优点必须与位段的移植性较弱这个缺点进行权衡。
与非门科技(北京)有限公司 All Rights Reserved.
京ICP证:070212号
北京市公安局备案编号: 京ICP备:号怎样在bison里构造一组语法产生式,使得C语言的结构体声明变量时不用加上struct关键字? - 知乎33被浏览2613分享邀请回答#include &iostream&
using namespace std;
int main()
cout && a && endl;
// Output: 47
#include &iostream&
using namespace std;
int main()
cout && x.c && endl;
// Compile Error
你也会发现第一个例子是没有错误的,是int类型的(当然你也可以说,class看来并没有达到真正意义上的一等公民地位),而如果我们要修改第二个例子,那就是需要加上struct/class关键字。是的,你没有看错,我用的是斜杠,就是说可以任意一个。在我看到C++编译器源代码之前,我也表示很不解为什么是这样,当然我看完后觉得是这么的自然。#include &iostream&
using namespace std;
int main()
struct a x; // No Problem
cout && x.c && endl;
// Output: 47
#include &iostream&
using namespace std;
int main()
class a x; // No Problem. It is class keyword!
cout && x.c && endl;
// Output: 47
别惊讶,他们就是这么的等价地位(当然你往a结构体里面加个方法,你就不能这么替代了,当然你自己可以尝试加入了方法以后是怎么样的)。所以,如果你要做成C++的这样不需要struct关键字的,类型系统更是关键,不仅产生式这么简单了。我说的比较散乱,你要的答案基本上也蕴含在我的回答里了。9添加评论分享收藏感谢收起1914 条评论分享收藏感谢收起查看更多回答

我要回帖

更多关于 结构体成员的访问方法 的文章

 

随机推荐