fork download
  1. #include <stdio.h>
  2.  
  3. #define M 3
  4. typedef int Marray_t[M][M];
  5.  
  6. void transpose_v1(Marray_t A) {
  7. int i, j;
  8. int *startAddress = &A[0][0];
  9. for (i=0; i<M; i++) {
  10. for (j=0; j<M; j++) {
  11. int* y = startAddress + (i*M+j);
  12. int* u = startAddress + (j*M+i);
  13. int temp;
  14. temp = *y;
  15. *y = *u;
  16. *u = temp;
  17. }
  18. }
  19. }
  20.  
  21. void transpose_v2(Marray_t A) {
  22. int i, j;
  23. int *startAddress = &A[0][0];
  24. for (i=0; i<M; i++) {
  25. for (j=0; j<i; j++) {
  26. int* y = startAddress + (i*M+j);
  27. int* u = startAddress + (j*M+i);
  28. int temp;
  29. temp = *y;
  30. *y = *u;
  31. *u = temp;
  32. }
  33. }
  34. }
  35.  
  36. void print(Marray_t A) {
  37. int i, j;
  38. for(i = 0; i < M; ++i) {
  39. for(j = 0; j < M; ++j) printf("%d ", A[i][j]);
  40. printf("\n");
  41. }
  42. }
  43.  
  44. int main(void) {
  45. int arr1[M][M] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
  46. int arr2[M][M] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
  47.  
  48. printf("arr1:\n");
  49. print(arr1);
  50. printf("arr2:\n");
  51. print(arr2);
  52.  
  53. transpose_v1(arr1);
  54. transpose_v2(arr2);
  55.  
  56. printf("arr1:\n");
  57. print(arr1);
  58. printf("arr2:\n");
  59. print(arr2);
  60. return 0;
  61. }
  62.  
Success #stdin #stdout 0s 2292KB
stdin
Standard input is empty
stdout
arr1:
1 2 3 
4 5 6 
7 8 9 
arr2:
1 2 3 
4 5 6 
7 8 9 
arr1:
1 2 3 
4 5 6 
7 8 9 
arr2:
1 4 7 
2 5 8 
3 6 9