news 2026/8/8 8:24:25

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言基础:构造数据类型-结构体 memcpy系统函数

11、const修饰的指针

const:只读。只允许被访问,不允许修改

表示该变量只允许使用,不允许被修改,记得初始化const int num=1

const int *p; //同下 int const *p; //修饰*p,*p的内容只读,*p=num ×,p=&num √ int *const p; //修饰p,指针p只读,p=&num × const int *const p; //同下 int const *const p; //指针p只读,*p内容只读,记得初始化

12、void* 指针(万能指针)

void*:缺省类型的指针

char*,int*,short*...这些指针,不仅保存地址,还有具体指向,明确指向sizeof(基类型)个字节的空间

void *p:只是一个保存地址编号的变量

void*<-------->char*,int*,short*...

*(int *)p;

memcpy系统函数

#include<string.h> memcpy(void *dst,const void *src,sizrof(a)) 内存重叠问题
#include<stdio.h> #include<string.h> void *mymemcpy(void *dst,const void *src,int size) { char *d=(char *)dst; char *s=(char *)src; int i=0; for(i=0;i<size;++i) { *(d+i)=*(s+i); } return dst; } void show_mymencpy(void *dst,int len) { int i; char *d=(char *)dst; for(i=0;i<len;++i) { printf("%c ",d[i]); } printf("\n"); } int main() { char a1[100]={"hello"}; char a2[100]={0}; mymemcpy(a2,a1,sizeof(a1)); //int len=strlen(a2); int len=sizeof(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 mydata;

struct

{

int year;

int mon;

int day;

}mydata;

声明结构体类型的同时,定义了变量mydata

3结构体初始化

//全部初始化 struct data mydata={2026,8,6}; struct data mydatatime={{2026,8,6},{14,6}}; //部分初始化 struct data mydata1= { .mon=8, .day=6 };

4结构体数据成员访问

  • 通过结构体变量访问结构体成员

变量名.成员1;

变量名.成员2;

变量名.成员3;

printf("%d,%d,%d", mydata.year, mydata.mon, mydata.day, };
  • 通过结构体指针访问结构体成员

结构体指针->成员1;

结构体指针->成员2;

结构体指针->成员3;

5结构体的存储方式

原则:

1.结构体成员在内存中存储时,成员必须存储在自己字节大小的整数倍位置

2.结构体整体占内存大小,一定是结构体中最大成员字节数的整数倍

注意:

1.在不同操作位系统下,相同结构体在内存中占用内存空间可能不一样。

64位系统,long类型和指针类型占8字节;而32位系统,long类型和指针类型占4字节

2.可以强制让结构体按指定字节数对齐

#pragma pack(1)//以下强制按1字节对齐 struct s {}; #pragma pack()//取消1字节对齐

6结构体做函数参数

两种传参方式:

如果要在被调函数中修改主调函数中的结构体变量,则传递结构体变量的地址

如果在被调函数中仅使用主调函数中定义的结构体变量,可以值传递,也可以地址传递

#include<stdio.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; s=get_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",(s+i)->name,(s+i)->age,(s+i)->score); printf("%s %d %d\n",(*(s+i)).name,(*(s+i)).age,(*(s+i)).score);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/8 8:22:47

AI 观测站|AI 开始让传统运维解释不了问题

上一篇我讲了一个判断&#xff1a;传统可观测性&#xff0c;为什么越来越看不懂 AI&#xff1f;这篇继续往下讲一层。上一篇讲的是&#xff1a;观察对象变了。从系统状态&#xff0c;变成 AI 行为。这篇讲的是&#xff1a;传统运维的问题定位逻辑&#xff0c;也开始变了。传统运…

作者头像 李华
网站建设 2026/8/8 8:21:20

财务软件凭证录入规范:摘要怎么写、科目怎么选、附件怎么贴

【摘要】凭证录入是财务日常工作的基础&#xff0c;规范与否直接影响账务质量和审计合规。本文详解凭证录入的规范要求。1 凭证摘要的撰写规范摘要的作用&#xff1a;简明扼要说明经济业务的内容&#xff0c;便于日后查账和审计。撰写原则&#xff1a;简洁、准确、完整。避免模…

作者头像 李华
网站建设 2026/8/8 8:20:43

秒杀场景下基于Jackson流式解析与JVM内存管控的流量控制方案

秒杀场景下基于Jackson流式解析与JVM内存管控的流量控制方案 电商秒杀活动的核心痛点是瞬时高并发与库存一致性的平衡&#xff1a;以常规美妆秒杀为例&#xff0c;峰值QPS常达到50万~200万&#xff0c;其中60%以上的请求为无效请求&#xff0c;包括参数格式错误、商品ID不存在、…

作者头像 李华
网站建设 2026/8/8 8:19:40

C语言指针与数组:本质区别与高级应用

1. 指针与数组的本质区别在C语言中&#xff0c;指针和数组是两个经常被混淆的概念。很多初学者会认为它们可以互换使用&#xff0c;但实际上它们有着本质的区别。指针是一个变量&#xff0c;它存储的是内存地址。当我们声明一个指针时&#xff0c;它会在内存中分配空间来存储这…

作者头像 李华
网站建设 2026/8/8 8:18:30

Obsidian AI技能规范:从AI乱写到安全协作的标准化实践

1. 从“AI乱写”到“AI协作”&#xff1a;为什么你的Obsidian需要技能规范 最近在折腾AI Agent的朋友&#xff0c;估计都遇到过同一个头疼的问题&#xff1a;让AI帮你整理笔记、生成内容&#xff0c;结果它一通操作猛如虎&#xff0c;回头一看&#xff0c;你的Obsidian知识库&a…

作者头像 李华