[c/c++] programming之路(28)、结构体存储和内存对齐+枚举类型+typedef+深拷贝和浅拷贝...
一、结构体存储
#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=#//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+深拷贝和浅拷贝...相关推荐
- c语言基础知识_结构体访问,共同体,枚举类型
C语言结构体变量的引用: 对于定义的结构体类型的普通变量,访问其成员用圆点运算符("."),标准访问方式如下: 结构体变量名.成员名 对于定义为指向结构体的指针变量,用箭头运算符( ...
- C语言结构体的大小 — — 内存对齐和位域
C语言结构体对齐 C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结 ...
- 失传的C结构体打包技艺 -- 内存对齐
作者:Eric S. Raymond 原文链接:http://www.catb.org/esr/structure-packing/ 谁应阅读本文 本文探讨如何通过手工重新打包C结构体声明,来减小内存 ...
- 【C语言系列】-结构体中的内存对齐
目录
- 内存对齐 | 原来字段顺序还能影响结构体占用的内存空间
大家好啊,不知道看了网管在上周的文章Go指针的使用限制和unsafe.Pointer突破之路,你们有没有感觉Golang 比之前想的还好用呢?确实能直接读写内存,很多以前觉得无能为力的事情就不再是问题 ...
- C++_类和结构体所占内存大小,静态成员问题
C++_类和结构体所占内存大小,静态成员问题 静态成员未初始化或者未调用(当然静态成员必须类外初始化才能调用)是不占内存的.静态成员不占类或结构体的内存 静态成员函数同样只声明未定义同样不占内存 指针 ...
- C/C++结构体四字节数据对齐
为了避免混淆,做如下规定,以下代码若不加特殊说明都运行于32位平台,结构体的默认对齐值是8,各数据类型所占字节数分别为 char占一个字节 int占四个字节 double占八个字节. 两个例子 请问下 ...
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题? 问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的. 问题2:给结构体变量分配之后,是否还要 ...
- C/C++ 结构体成员在内存中的对齐规则(转载)
这几天在看王艳平的<windows 程序设计>,第5章讲解了MFC框架是怎么管理窗口句柄到窗口实例之间的映射,用到了两个类CPlex和CMapPtrToPtr,用于管理内存分配的类(避免因 ...
最新文章
- python编程大赛队名_【推荐】程序员团队名称和口号word版本 (12页)
- b+树时间复杂度_深入理解数据库系统之存储存引擎(二叉搜索树)
- JavaScript的过去、现在和未来--过去
- - -(我最近的开发..)
- 数据清洗的基本流程_数据分析小白学习之路(三)——Excel多练熟能生巧
- Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的?
- 小波阈值去噪法基础理论
- CentOS多网卡重命名配置
- #line预编译字分析
- Python基础----列表
- 基于Discuz的原生态MVC框架Uxf
- IntelliJ中可能的东西在Eclipse中是不可能的?
- PHP微信模版消息有时收不到_PHP微信开发之模板消息回复
- 《圈圈教你玩USB》 第三章 USB鼠标的实现——看书笔记( 3 )
- MINIST手写数字数据集–神经网络(mini-batch)
- python for ArcGIS 绘制重庆市板块地图
- SEO和SEM的区别是什么?
- 转行学IT,你真的准备好了吗?
- scrapy爬取动态网页
- 苹果应用审核指南最新
热门文章
- axios队列 vue_(十三 )Vue 封装axios(四种请求)及相关介绍
- python接口 同花顺_这是真的么 | 学会了用Python预测股票价格
- 企业网络推广方法之网站内容链接SEO该怎么做?
- 营销型网站吸引用户说难也难,说简单也简单
- 网页优化中,网站页面结构该注意什么?
- eclipse制作uml_Eclipse生成一个UML
- vim-commentary 插件用法
- Android textview换行
- 有kotlin中的Android项目编译出现 Unresolved reference: R
- Deep Belief Network简介——本质上是在做逐层无监督学习,每次学习一层网络结构再逐步加深网络...