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赋值会报错;

但是加入结构体之后;

 

 可以直接赋值,并可以正确输出数组值。

数组复制的两种方式:

  1. 利用 memcpy(b, a, sizeof(int) * 5); 复制一整段内存空间中的内容;
  2. 利用 for/while 等循环语句,逐个复制数组中每一个元素: b[i] = a[i];

为什么结构体可以直接复制数组:

赋值的目的是什么?就是让一块内存空间的内容,与另一块内存空间中的内容完全相同。如果想要完成复制操作,那么就需要知道这块内存空间的大小。

编译器是知道一个结构体变量所占用的空间大小的,所以当复制的时候,类似于 memcpy 一样,把一个结构体变量所占空间按照 byte to byte 的方式复制过去。

而数组也并不是一个指针,了解更多看下方参考文章

参考文章:数组不可直接赋值,为何结构体中的数组却可以?讲明白了! - 知乎 (zhihu.com)

posted @   旺仔喔喔糖  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示