您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

c语言结构的常见用法 {电影网站源码}

  • 时间:2022-08-20 00:52 编辑: 来源: 阅读:281
  • 扫一扫,手机访问
摘要:c语言结构的常见用法 {电影网站源码}
昨天边肖给大家做了一个C语言基本语法的参考——结构。今天,边肖将带领大家复习struct,顺便挖掘一些你之前没有注意到的小细节。 基本定义:结构,简单来说,就像包装。它将少量具有共同特征的变量(例如,属于某一类事物的属性,往往是某些业务相关属性的聚合)封装在内部,通过正方法访问和修改内部变量。 结构定义:第一个:only结构定义struct stuff { char job[20];int age浮动高度;};第二:附上该结构类型的“结构变量”的初始结构定义。//直接附加变量名huqinweistructstuff { char job[20]。int age浮动高度;}胡琴薇;可能刚开始不习惯的时候很容易混淆。其实这相当于:struct stuff { char job[20];int age浮动高度;};结构材料胡琴薇;第三:如果这个结构只使用一个变量Huqinwei,就不用再用struct stuff yourname了;来定义第二个变量。 然后,附加变量初始化的结构定义可以进一步简化为第三种:struct { char job[20];int age浮动高度;}胡琴薇;去掉结构名比较简单,但是不能用结构定义其他变量——至少我现在不知道这个方法。 结构变量及其内部成员变量的定义和访问:绕口?有必要区分结构变量和结构内部成员变量的概念。 正如刚才第二个提到的,结构变量的声明可以用:struct stuff yourname它的成员变量的定义可以用公告来做:structstuff hu秦为= {"manager ",30,185 };还可以考虑结构之间的赋值:struct stuff faker = Huqinwei//或者struct stuff faker2//faker 2 = faker;打印,可以看出结构的每个成员变量都是相同的。如果不使用以上两种方法,成员数组的操作会略显麻烦(使用for循环可能更好)。Hu qinwei . job[0]= ' M ';Hu qinwei . job[1]= ' a ';胡琴薇. = 27胡琴薇. = 185除了符号“.”,成员变量可以通过"-> "访问来访问(下面会提到) 引用(C++),指针和数组:一、引用和指针:int main(){ struct stuff huqin Wei;结构材料和。ref =胡琴薇;ref.age = 100printf("Huqinwei.age是%d ",Hu qinwei . age);printf("引用年龄为%d ",引用年龄);结构材料。胡琴薇;ptr-& gt;年龄= 200;printf("Huqinwei.age是%d ",Hu qinwei . age);printf(" ptr-& gt;年龄是%d ",Hu qinwei . age);//现在都写好了,还要添加指针引用。Struct Stuff * & refToPtr = ptrrefToPtr-& gt;年龄= 300;printf("Huqinwei.age是%d ",Hu qinwei . age);printf(" refToPtr-& gt;年龄是%d ",refToPtr-& gt;年龄);}更正:之前给引用的初始化语句是错误的,没有说明引用是纯c中没有的东西。 引用是C++特有的机制,必须得到编译器的支持。至于引用转换到C的本质,结构无法避免自定义,必须有数组:struct test { int a[3];int b;};//对于数组和变量同时存在的情况,有如下定义: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 } };数组# include # include # include # include typedef结构可变{ inticntchar PC[0];} schangeablemain(){printf("结构可变的大小:%d ",sizeof(s changeable));s changeable * p changeable =(s changeable *)malloc(sizeof(s changeable)+10 * sizeof(char));printf(" pchangeable的大小:%d ",sizeof(pchangeable));schangeable * pchangeable 2 =(schangeable *)malloc(sizeof(schangeable)+20 * sizeof(char));pchangeable 2-& gt;iCnt = 20printf(" pchangeable 2-& gt;iCnt : %d ",pchangeable 2-& gt;iCnt);strncpy(pchangeable 2-& gt;pc,《hello world》,11);printf("%s ",pchangeable 2-& gt;PC);printf(" pchangeable 2的大小:%d ",sizeof(pchangeable 2));} struct changeable的运行结果大小:4 PC changeable的大小:4p changeable 2->:Icnt:20 hello world pchangeable的大小2: 4结构本身就是一个int length(这个int值通常只用来表示后面数组的长度)。下面这个数组的长度不算,但是这个数组可以直接使用。 (说后面是指针?指针也会占用长度!这个没人住!原理很简单。这个东西完全是阵后面的尾巴。malloc开发了一个连续的空间。 其实这不应该算是一种机制,感觉更应该是一种技能。)补充:对于非弹性数组,不能以“char a[]”的形式定义柔性变量,必须指定其大小。 弹性数组在结构中,只允许以下形式:struct s { int a;char b[];};颠倒顺序会使B和A的数据重合,编译时不会通过。 char b[] = "地狱";也不行(C和C++都不行)。没有整型变量A,整个结构的长度将为0,编译器不允许编译!区别在于,事实上,C++形式上允许空结构。本质上是通过机制避免纯粹的空结构和类对象,自动给空结构对象分配一个字节(sizeof()返回1),方便区分对象,避免地址重合!所以,C,如果有一个空结构,定义该结构的两个(或者十几个,或者干脆一个数组)变量(对象),地址完全一样!!!!!!!!!看着调试程序运行,这些语句其实都是放屁,根本不运行,没有实际意义。c根本不支持空结构这种东西(或者有人说我还没搞清楚什么场合有用)struct S2 {//char a[]= " hasd ";//int c;};int main(){ struct S2 s22;结构s2 s23结构s2 s24结构s2 s25}例外的是C++只对弹性数组的结构不分配空间(怕和变长结构机制发生某种冲突,比如怎么计算大小):struct s { char b[];};struct s {//char b[];};两者在C++中是不同的,但空结构是“大的”(sizeof()返回1)。补充:这个机制利用了一个非常重要的特性——数组和指针的区别!数组指针和数组指针在很多操作上是一样的,只是本质不同。 最直观的,指针可以改成point,数组不行。因为数组占用的每个内存地址都用来存储变量或对象,指针占用的内存地址存储一个地址,所以数组没有单独存储指向地址这样的结构。 数组的位置是固定的,就像指针变量本身的位置也是固定的一样。改变的是指针的值,也就是指针的目标地址。因为数组不存储目标地址,所以指针不能改变。 试图将一个地址强制赋给一个数组,只意味着将一个指针赋给一个数组,类型是不兼容的。 结构的嵌套:结构的嵌套没有什么太意外的,遵循肯定法则就好://对于“一锤子买卖”,我只对最终的结构变量感兴趣,其中A和B也可以删除,但是最好带struct A { struct B { int c;} b;} a;//使用以下方式访问:a . b . c = 10;特别是,您可以定义结构B并同时使用它:struct A { struct B { int c;} b;结构B某人;} a;使用和测试:a . b . c = 11;printf("%d ",a . b . c);a . sb . c = 22;printf("%d ",a . sb . c);结果是正确的。 但是,如果嵌套结构B是在A内部声明的,并且没有定义相应的对象实体B,那么这个结构B的大小仍然不计入结构A中。 结构与功能:首先:void func(int);func在结构中使用int成员变量就像使用普通的int变量一样,这是一种愚蠢的方法。 另一种是传递copy和pointer://struct A的定义同上。//设置两个函数分别传递structa结构及其指针。 void func1(struct A a){printf("%d ",A . b . c);} void func 2(struct a* A){ printf(" % d ",A-& gt;公元前);} main(){ a . b . c = 112;结构a* pa;pa = & ampa;func 1(a);func 2(& amp;a);func 2(pa);}边肖给大家推荐一个学习氛围很好的地方。C/C++交换企鹅裙:【3.4.1。+ 636, 7.2.7.]适合大学生,小白,想转行,加入这个求职大军。 裙子里有很多学习资料,有大神解答交流问题,还有每天晚上占用内存空间的免费直播课程:struct structure。你在定义结构的时候是不能申请内存空间的,但是如果是结构变量的话,你可以在声明的时候分配内存空间——两者的关系就像C++类和对象,对象分配内存(但严格来说,作为代码段,结构定义部分是做的)。正文“真的不占地方?当然,这是另一个范畴的话题) 结构的大小通常(只是通常)是结构中包含的变量的总和。下面打印出上面结构的size:printf(" size of struct man:% d ",sizeof(struct man));printf("size:%d ",sizeof(胡琴薇));结果毫无悬念。都是28: char数组20,int变量4,浮点变量4。以下是不同寻常的:结构中较小的成员可能被强行对齐,造成空位,这与读取记忆的机制有关。为了效率, 通常32位机是按4字节对齐的,小于4字节的都按4字节处理。如果有连续的小于4个字节的,你可以毫无顾虑地对齐它们。只有当整数向上取整,下一个元素超过一个对齐位置时,才可以开始调整,比如3+2或者1+4,这些都需要重新开始(下面这个结构的大小是8bytes)。相关的例子很多,这里就不赘述了。 结构{ char a;短b;int c;}相应的,64位机器按8字节对齐。 然而,对齐不是绝对的。您可以使用#pragma pack()修改对齐方式。如果将其更改为1,结构大小将是实际成员变量大小的总和。 与C++的类不同,结构不能初始化它的内部变量, 下面是一个错误演示:#include//直接用变量名huqinweistructstuff {//char job[20]= " programmer ";//char job[];//int age = 27;//浮动高度= 185;}胡琴薇;PS:公布结构也要注意位置,范围不一样。 C++的结构变量的公告定义和C略有不同,说白了就是更“面向对象”,要求更低。 那么如果熟悉常用方法,有哪些常见错误需要注意呢?参见C语言结构常见错误。


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部