优化下面代码#include <stdio.h> #include<string.h> char tx[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; char rx[4]={0}; char result[100]={0}; int main() { for(int j=0;j<3;j++) { for(int i=0;i<3;i++) { if(j==0) rx[i]=tx[2+i]; else if(j==1) rx[i]=tx[6+i]; else rx[i]=tx[10+i]; } memcpy(result+j*4,rx,4); } for(int i=0;i<12;i++) printf("%d\n",result[i]); return 0; }
时间: 2023-12-18 14:04:24 浏览: 57
首先,代码中的数组 `rx` 只需要定义为长度为3即可,因为每次只会存入3个元素。
其次,可以将 `memcpy` 函数的调用从循环中移出来,减少函数调用的次数。
最后,可以使用指针来避免使用 `memcpy` 函数。
优化后的代码如下:
```c
#include <stdio.h>
char tx[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
char rx[3]={0};
char result[100]={0};
int main() {
char *p = result;
for(int j=0; j<3; j++) {
for(int i=0; i<3; i++) {
if(j==0) {
rx[i] = tx[2+i];
} else if(j==1) {
rx[i] = tx[6+i];
} else {
rx[i] = tx[10+i];
}
}
for(int i=0; i<3; i++) {
*p++ = rx[i];
}
}
for(int i=0; i<12; i++) {
printf("%d\n",result[i]);
}
return 0;
}
```
注意,这里使用指针遍历 `result` 数组,需要保证 `result` 数组至少有足够的空间来存储 `rx` 数组,否则可能会发生越界访问。
阅读全文