↑点击上方蓝色字体,关注“嵌入式软件实战派”获得更多精品干货。
什么!数组之间不能赋值?▍ 数组之间不能直接赋值 ?我在刚学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语言设计,这都不行!”
▍曲线救国,用拷贝函数咯当时,我在网上搜了一圈,居然看到个什么“给数组赋值的几种方法”。我看到“几种方法”这几个字眼,就很高兴。谁知,几种方法无非是:
用[]去下标一个一个赋值,如arr[i] = xx;
用+下标的形式赋值,如arr+1;
用指针的形式赋值p=arr; *p++ = xx;
void arr_cpy(char* dest, char* src, int size){ for(int i = 0; i < size; i++) { dest[i] = src[i]; }}
还是不爽啊!那就直接用memcpy吧!不甘心啊!
▍给数组穿个马甲?号称高级编程语言的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”获取源码。