一、结构体存储

#include<stdio.h>
#include<stdlib.h>struct info{char c;        //1    2    4    8    double num;    //1    2    4    8        char short int doublechar ch[9];    //9    10    12    16

};void main() {printf("%d\n",sizeof(struct info));struct info in={'a',5.2,"hello"};printf("%p\n",&in);printf("%p\n",&in.c);printf("%p\n",&in.num);printf("%p\n",&in.ch);system("pause");
}

二、枚举类型(限定取值)

枚举常量实质是整型数据

#include<stdio.h>
#include<stdlib.h>//枚举的一般形式,限定在这个范围内取值
//如果没有一个赋初值,就会从0循环到最后一个,每次加1
//如果第一个赋初值,后面每个加1
//除非自己赋值,否则计算机赋值会让每个枚举常量都不同
enum level{司令=5,军长=5,师长,旅长,团长,营长,连长,排长,班长,士兵
};void main() {enum level l1=司令;enum level l2=军长;enum level l3=师长;printf("%d\n",l1);printf("%d\n",l2);printf("%d\n",l3);system("pause");
}

三、typedef

#include<stdio.h>
#include<stdlib.h>typedef int aa;            //typedef没有创建数据类型,给已经有的数据类型起一个别名.编译时处理,仅适用于类型
#define zhengshu num    //define是替换,预处理,适用于任何场合void main() {aa zhengshu=10;printf("%d\n",num);system("pause");
}

#include<stdio.h>
#include<stdlib.h>typedef int I;//给int一个别称
typedef int* IP;
void main() {I num=100;//int num=100IP p=&num;//int *p=&numprintf("%d,%d\n",num,*p);printf("%p,%p\n",&num,p);system("pause");
}

#include<stdio.h>
#include<stdlib.h>void main() {/*int a[10];int s[10];*/typedef int s[10];//重定义数组类型
    s x;for (int i = 0; i < 10; i++){x[i]=i;printf("%d\n",x[i]);}system("pause");
}

#include<stdio.h>
#include<stdlib.h>
#include<string.h>struct info{char name[100];int num;
};typedef struct info I;//I=struct info
typedef struct info* P;//P=struct info*void main() {I s;strcpy(s.name,"yincheng");s.num=100;printf("%s,%d\n",s.name,s.num);P ip=(P)malloc(sizeof(I));strcpy(ip->name,"yincheng8848");ip->num=8888;printf("%s,%d\n",(*ip).name,ip->num);  free(ip);system("pause");
}

#include<stdio.h>
#include<stdlib.h>
#include<string.h>typedef struct tel{char name[30];long long num;
}T,*P;void main() {printf("%d\n",sizeof(struct tel));printf("%d\n",sizeof(T));printf("%d\n",sizeof(P));T t1;strcpy(t1.name,"yincheng");t1.num=18288889999;printf("%s,%lld\n",t1.name,t1.num);P pt1=(P)malloc(sizeof(T));//malloc之后记得要freestrcpy(pt1->name,"尹成");pt1->num=18611118888;printf("%s,%d\n",(*pt1).name,pt1->num);free(pt1);system("pause");
}

四、深拷贝和浅拷贝

#include<stdio.h>
#include<stdlib.h>
#include<string.h>typedef struct string{char *p;int len;
}S;//浅拷贝,共享内存
void main1() {S s1,s2;s1.len=10;s1.p=(char *)malloc(sizeof(char)*10);strcpy(s1.p,"hello");printf("s1.p=%s\n",s1.p);s2.len=s1.len;s2.p=s1.p;*(s1.p)='K';printf("s2.p=%s\n",s2.p);system("pause");
}
//深拷贝,拷贝内存内容
void main() {S s1,s2;s1.len=10;s1.p=(char *)malloc(sizeof(char)*10);strcpy(s1.p,"hello");printf("s1.p=%s\n",s1.p);s2.len=s1.len;s2.p=(char *)malloc(sizeof(char)*10);strcpy(s2.p,s1.p);*(s1.p)='K';printf("s2.p=%s\n",s2.p);system("pause");
}

浅拷贝

深拷贝

转载于:https://www.cnblogs.com/little-monkey/p/7683382.html

[c/c++] programming之路(28)、结构体存储和内存对齐+枚举类型+typedef+深拷贝和浅拷贝...相关推荐

  1. c语言基础知识_结构体访问,共同体,枚举类型

    C语言结构体变量的引用: 对于定义的结构体类型的普通变量,访问其成员用圆点运算符("."),标准访问方式如下: 结构体变量名.成员名 对于定义为指向结构体的指针变量,用箭头运算符( ...

  2. C语言结构体的大小 — — 内存对齐和位域

    C语言结构体对齐 C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结 ...

  3. 失传的C结构体打包技艺 -- 内存对齐

    作者:Eric S. Raymond 原文链接:http://www.catb.org/esr/structure-packing/ 谁应阅读本文 本文探讨如何通过手工重新打包C结构体声明,来减小内存 ...

  4. 【C语言系列】-结构体中的内存对齐

    目录

  5. 内存对齐 | 原来字段顺序还能影响结构体占用的内存空间

    大家好啊,不知道看了网管在上周的文章Go指针的使用限制和unsafe.Pointer突破之路,你们有没有感觉Golang 比之前想的还好用呢?确实能直接读写内存,很多以前觉得无能为力的事情就不再是问题 ...

  6. C++_类和结构体所占内存大小,静态成员问题

    C++_类和结构体所占内存大小,静态成员问题 静态成员未初始化或者未调用(当然静态成员必须类外初始化才能调用)是不占内存的.静态成员不占类或结构体的内存 静态成员函数同样只声明未定义同样不占内存 指针 ...

  7. C/C++结构体四字节数据对齐

    为了避免混淆,做如下规定,以下代码若不加特殊说明都运行于32位平台,结构体的默认对齐值是8,各数据类型所占字节数分别为 char占一个字节 int占四个字节 double占八个字节. 两个例子 请问下 ...

  8. C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?

    C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题? 问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的. 问题2:给结构体变量分配之后,是否还要 ...

  9. C/C++ 结构体成员在内存中的对齐规则(转载)

    这几天在看王艳平的<windows 程序设计>,第5章讲解了MFC框架是怎么管理窗口句柄到窗口实例之间的映射,用到了两个类CPlex和CMapPtrToPtr,用于管理内存分配的类(避免因 ...

最新文章

  1. python编程大赛队名_【推荐】程序员团队名称和口号word版本 (12页)
  2. b+树时间复杂度_深入理解数据库系统之存储存引擎(二叉搜索树)
  3. JavaScript的过去、现在和未来--过去
  4. - -(我最近的开发..)
  5. 数据清洗的基本流程_数据分析小白学习之路(三)——Excel多练熟能生巧
  6. Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的?
  7. 小波阈值去噪法基础理论
  8. CentOS多网卡重命名配置
  9. #line预编译字分析
  10. Python基础----列表
  11. 基于Discuz的原生态MVC框架Uxf
  12. IntelliJ中可能的东西在Eclipse中是不可能的?
  13. PHP微信模版消息有时收不到_PHP微信开发之模板消息回复
  14. 《圈圈教你玩USB》 第三章 USB鼠标的实现——看书笔记( 3 )
  15. MINIST手写数字数据集–神经网络(mini-batch)
  16. python for ArcGIS 绘制重庆市板块地图
  17. SEO和SEM的区别是什么?
  18. 转行学IT,你真的准备好了吗?
  19. scrapy爬取动态网页
  20. 苹果应用审核指南最新

热门文章

  1. axios队列 vue_(十三 )Vue 封装axios(四种请求)及相关介绍
  2. python接口 同花顺_这是真的么 | 学会了用Python预测股票价格
  3. 企业网络推广方法之网站内容链接SEO该怎么做?
  4. 营销型网站吸引用户说难也难,说简单也简单
  5. 网页优化中,网站页面结构该注意什么?
  6. eclipse制作uml_Eclipse生成一个UML
  7. vim-commentary 插件用法
  8. Android textview换行
  9. 有kotlin中的Android项目编译出现 Unresolved reference: R
  10. Deep Belief Network简介——本质上是在做逐层无监督学习,每次学习一层网络结构再逐步加深网络...