アプローチの一つは、以下
#include <stdio.h>
#define N 4
int main(void)
{
int a[N][N] =
{
{ 1, 0, 0, 2 },
{ 0, 3, 4, 0 },
{ 0, 5, 6, 0 },
{ 7, 0, 0, 8 }
};
for (size_t i = 0; i < N; i++)
{
for (size_t j = 0; j < N; j++) printf("%d ", a[i][j]);
printf("\n");
}
printf("\n");
for (size_t i = 0; i < N * N/2; i++)
{
int tmp = a[i/N][i % N];
a[i/N][i % N] = a[(N * N - i - 1)/N][(N * N - i - 1) % N];
a[(N * N - i - 1)/N][(N * N - i - 1) % N] = tmp;
}
for (size_t i = 0; i < N; i++)
{
for (size_t j = 0; j < N; j++) printf("%d ", a[i][j]);
printf("\n");
}
printf("\n");
return 0;
}
あるプログラムの出力は、同じポインタを使用して書くことができる
1 0 0 2
0 3 4 0
0 5 6 0
7 0 0 8
8 0 0 7
0 6 5 0
0 4 3 0
2 0 0 1
あります。例えば
#include <stdio.h>
#define N 4
int main(void)
{
int a[N][N] =
{
{ 1, 0, 0, 2 },
{ 0, 3, 4, 0 },
{ 0, 5, 6, 0 },
{ 7, 0, 0, 8 }
};
for (size_t i = 0; i < N; i++)
{
for (size_t j = 0; j < N; j++) printf("%d ", a[i][j]);
printf("\n");
}
printf("\n");
for (int *first = (int *)a, *last = (int *)a + N * N;
first < last;
++first, --last)
{
int tmp = first[0];
first[0] = last[-1];
last[-1] = tmp;
}
for (size_t i = 0; i < N; i++)
{
for (size_t j = 0; j < N; j++) printf("%d ", a[i][j]);
printf("\n");
}
printf("\n");
return 0;
}
は、スタックオーバーフローへようこそ!これまでのところあなたの研究/デバッグの努力を示してください。まず[Ask]ページをお読みください。 –