C语言基础:构造数据类型-结构体 memcpy系统函数

发布时间:2026/10/11 17:34:30
C语言基础:构造数据类型-结构体 memcpy系统函数 11、const修饰的指针const只读。只允许被访问不允许修改表示该变量只允许使用不允许被修改记得初始化const int num1const int *p; //同下 int const *p; //修饰*p*p的内容只读*pnum ×pnum √ int *const p; //修饰p指针p只读pnum × const int *const p; //同下 int const *const p; //指针p只读*p内容只读记得初始化12、void* 指针万能指针void*缺省类型的指针char*int*short*...这些指针不仅保存地址还有具体指向明确指向sizeof基类型个字节的空间void *p只是一个保存地址编号的变量void*--------char*int*short*...*int *pmemcpy系统函数#includestring.h memcpy(void *dst,const void *src,sizrof(a)) 内存重叠问题#includestdio.h #includestring.h void *mymemcpy(void *dst,const void *src,int size) { char *d(char *)dst; char *s(char *)src; int i0; for(i0;isize;i) { *(di)*(si); } return dst; } void show_mymencpy(void *dst,int len) { int i; char *d(char *)dst; for(i0;ilen;i) { printf(%c ,d[i]); } printf(\n); } int main() { char a1[100]{hello}; char a2[100]{0}; mymemcpy(a2,a1,sizeof(a1)); //int lenstrlen(a2); int lensizeof(a2)/sizeof(a2[0]); show_mymencpy(a2,len); }构造数据类型数据类型short、int、long、char、float、double、void指针类型构造数据类型结构体、共用体、枚举1、结构体1语法struct 名字{数据类型 成员1数据类型 成员2数据类型 成员3...};//声明了名为struct data的新的数据类型 struct data { int year; int mon; int day; struct time mytime; };注意1、声明结构体时{ }后的分号不可省略2、结构体内成员之间用分号隔开3、struct后面的名称可以省略匿名结构体4、结构体放在全局作用域2结构体变量定义结构体类型 变量名struct data mydatastruct{int year;int mon;int day;}mydata;声明结构体类型的同时定义了变量mydata3结构体初始化//全部初始化 struct data mydata{202686} struct data mydatatime{{2026,8,6},{14,6}}; //部分初始化 struct data mydata1 { .mon8, .day6 };4结构体数据成员访问通过结构体变量访问结构体成员变量名.成员1变量名.成员2变量名.成员3printf(%d,%d,%d, mydata.year, mydata.mon, mydata.day, };通过结构体指针访问结构体成员结构体指针-成员1结构体指针-成员2结构体指针-成员35结构体的存储方式原则1.结构体成员在内存中存储时成员必须存储在自己字节大小的整数倍位置2.结构体整体占内存大小一定是结构体中最大成员字节数的整数倍注意1.在不同操作位系统下相同结构体在内存中占用内存空间可能不一样。64位系统long类型和指针类型占8字节而32位系统long类型和指针类型占4字节2.可以强制让结构体按指定字节数对齐#pragma pack(1)//以下强制按1字节对齐 struct s {} #pragma pack()//取消1字节对齐6结构体做函数参数两种传参方式如果要在被调函数中修改主调函数中的结构体变量则传递结构体变量的地址如果在被调函数中仅使用主调函数中定义的结构体变量可以值传递也可以地址传递#includestdio.h struct stu { char name[32]; int age; int score; }; struct stu get_stu_info() { struct stu s; scanf(%s,s.name); scanf(%d,s.age); scanf(%d,s.score); return s; } void get_stu_info_1(struct stu *s) { scanf(%s,s-name); scanf(%d,s-age); scanf(%d,s-score); } int main() { struct stu s; sget_stu_info(); printf(%s %d %d\n,s.name,s.age,s.score); get_stu_info_1(s); printf(%s %d %d\n,s.name,s.age,s.score); return 0; }7.结构体数组struct 名称 数组名[元素个数]struct stu array[3]{{zhangsan,20,100},{lisi,21,90},{wanger,22,85}};array[下标]类型---》struct stu类型结构体数组的三种访问方式 printf(%s %d %d\n,s[i].name,s[i].age,s[i].score); printf(%s %d %d\n,(si)-name,(si)-age,(si)-score); printf(%s %d %d\n,(*(si)).name,(*(si)).age,(*(si)).score);

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询