C语言中使用struct实现数组复制


在C语言中,直接在参数中声明数组变量是无法实现传值传参的,这时只会把数组的首地址传过去。将数组放置到一个struct中进行传参,可以实现传值的方式。例如下面的程序:

[cpp]

  1. #include <stdio.h>   
  2.   
  3. struct tag {int a[100]};  
  4. struct tag orange, lime, lemon;  
  5.   
  6. struct tag twofold(struct tag s){  
  7.     int i;  
  8.     for(i=0; i<100; i++){  
  9.         s.a[i] *= 2;  
  10.     }  
  11.     return s;  
  12. }  
  13.   
  14. int main(){  
  15.     int i;  
  16.     for(i=0; i<100; i++){ orange.a[i] = 1; }  
  17.     lime = twofold(orange);  
  18.     for(i=0; i<10; i++){  
  19.         printf("before: lime.a[%d] = %d\n", i, lime.a[i]);  
  20.     }  
  21.     lemon = lime;  
  22.     for(i=0; i<100; i++){ lemon.a[i] = 7; }    
  23.   
  24.     for(i=0; i<10; i++){  
  25.         printf("lemon.a[%d] = %d\n", i, lemon.a[i]);  
  26.     }  
  27.   
  28.     for(i=0; i<10; i++){  
  29.         printf("after: lime.a[%d] = %d\n", i, lime.a[i]);  
  30.     }  
  31. }  
输出结果:

[java]

  1. before: lime.a[0] = 2  
  2. before: lime.a[1] = 2  
  3. before: lime.a[2] = 2  
  4. before: lime.a[3] = 2  
  5. before: lime.a[4] = 2  
  6. before: lime.a[5] = 2  
  7. before: lime.a[6] = 2  
  8. before: lime.a[7] = 2  
  9. before: lime.a[8] = 2  
  10. before: lime.a[9] = 2  
  11. lemon.a[0] = 7  
  12. lemon.a[1] = 7  
  13. lemon.a[2] = 7  
  14. lemon.a[3] = 7  
  15. lemon.a[4] = 7  
  16. lemon.a[5] = 7  
  17. lemon.a[6] = 7  
  18. lemon.a[7] = 7  
  19. lemon.a[8] = 7  
  20. lemon.a[9] = 7  
  21. after: lime.a[0] = 2  
  22. after: lime.a[1] = 2  
  23. after: lime.a[2] = 2  
  24. after: lime.a[3] = 2  
  25. after: lime.a[4] = 2  
  26. after: lime.a[5] = 2  
  27. after: lime.a[6] = 2  
  28. after: lime.a[7] = 2  
  29. after: lime.a[8] = 2  
  30. after: lime.a[9] = 2  

相关内容