c语言结构体
#include<iostream> #include<string> using namespace std; struct m{ int a; string b; }; int main(void){ int i,j; int a[10]; char b[10]; char *e,*f; m k[10]; k[0]=k[1]; // e=f; // b[0]=b[1]; // a[0]=a[1]; // i=j; if(1) cout<<"hello world!"<<endl; return 0; }
这段代码中,我创建了结构体数组k[10],而我并没有对结构体数组进行赋值,但k[0]=k[1]确可以顺利执行。而其他变量和数组不能进行这种操作。
后来上网查询,我还发现了结构体的另一件神奇的事——可以直接对数组赋值;
这样对b赋值会报错;
但是加入结构体之后;
可以直接赋值,并可以正确输出数组值。
数组复制的两种方式:
- 利用 memcpy(b, a, sizeof(int) * 5); 复制一整段内存空间中的内容;
- 利用 for/while 等循环语句,逐个复制数组中每一个元素: b[i] = a[i];
为什么结构体可以直接复制数组:
赋值的目的是什么?就是让一块内存空间的内容,与另一块内存空间中的内容完全相同。如果想要完成复制操作,那么就需要知道这块内存空间的大小。
编译器是知道一个结构体变量所占用的空间大小的,所以当复制的时候,类似于 memcpy 一样,把一个结构体变量所占空间按照 byte to byte 的方式复制过去。
而数组也并不是一个指针,了解更多看下方参考文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)