c++ 数组批量赋值_数组之间不能赋值?穿个马甲吧!

↑点击上方蓝色字体,关注“嵌入式软件实战派”获得更多精品干货。

什么!数组之间不能赋值?
数组之间不能直接赋值 ?我在刚学C语言的时候,就尝试过以下代码
    int arr_a[10] = {0,1,2,3,4,5,6,7,8,9};    int arr_b[10] = {0};    arr_b = arr_a;
然后编译器扔给我一个错误:
error: assignment to expression with array type     arr_b = arr_a;           ^
而我扔出一句“我X,反人类的C语言设计,这都不行!” ▍曲线救国,用拷贝函数咯当时,我在网上搜了一圈,居然看到个什么“给数组赋值的几种方法”。我看到“几种方法”这几个字眼,就很高兴。谁知,几种方法无非是:
  1. 用[]去下标一个一个赋值,如arr[i] = xx;

  2. 用+下标的形式赋值,如arr+1;

  3. 用指针的形式赋值p=arr; *p++ = xx;

呃…… afc3e9f28a3cd706ff9231142a482112.png很无奈地,老老实实给数组元素一个一个赋值,自己写了个函数
void arr_cpy(char* dest, char* src, int size){    for(int i = 0; i < size; i++)    {        dest[i] = src[i];    }}
还是不爽啊!那就直接用memcpy吧!不甘心啊!

f486efb62d59c66e7a39092b46d2853f.png

▍给数组穿个马甲?号称高级编程语言的C,居然没办法让数组之间赋值的方法?程序员犯强迫症了有没有!

给数组穿个马甲吧,结构体!哈哈哈!

结构体赋值总得用过吧。《The C Programming Language》里面也提到过结构体做参数。

As another example, the function ptinrect tests whether a point is inside a rectangle, where we have adopted the convention that a rectangle includes its left and bottom sides but not its top and right sides:

The C Programming Language
/* ptinrect: return 1 if p in r, 0 if not */int ptinrect(struct point p, struct rect r){    return p.x >= r.pt1.x && p.x < r.pt2.x        && p.y >= r.pt1.y && p.y < r.pt2.y;}

所以,我们可以这样做:

    typedef struct     {        int arr[10];    }ARR_S;        ARR_S arr_s1 = {{0,1,2,3,4,5,6,7,8,9}};    ARR_S arr_s2 = {{0}};    arr_s2 = arr_s1;    PRINT_DIGIT_ARR(arr_s2.arr);

输出结果:

arr_s2.arr: 0 1 2 3 4 5 6 7 8 9
好了,留个课后作业:C语言可以通过结构体形式给数组穿马甲赋值,C++可以吗?C++的结构体是什么?直接赋值会怎样?如果想获得测试源码,关注公众号“ 嵌入式软件实战派”,回复“array_assign”获取源码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值