我需要反转一个2d数组,这个数组是用指针表法制作的。
要清楚,如果数组是
A B C D E
F G H I J
K L M N O
我需要:
E D C B A
J I H G F
O N M L K
我的代码:
#include <stdio.h>
#include <stdlib.h>
#define HEIGHT 3
#define WIDHT 7
void print (char *imprimir)
{
int i,j;
for (i=0;i<HEIGHT;i++)
{
for (j=0;j<WIDHT;j++)
{
printf ("%2c",*(imprimir+(i*WIDHT)+j));
}
printf ("n");
}
}
int main()
{
//FILLING THE ARRAY
char *array=malloc(WIDHT*HEIGHT);
int i,j;
for (i=0;i<HEIGHT;i++)
{
for (j=0;j<WIDHT;j++)
{
*(array+(i*WIDHT)+j)=(i*WIDHT)+j+'a';
}
}
print (array);
//TRYING TO REVERSE IT
char *tmp=malloc(WIDHT);
for (i=0;i<HEIGHT;i++)
{
for (j=0;j<WIDHT/2;j++);
{
*tmp=*(array+(i*WIDHT)+j);
*(array+(i*WIDHT)+j)=*(array+(i*WIDHT)+(WIDHT-j));
*(array+(i*WIDHT)+(WIDHT-j))=*tmp;
}
}
printf ("PRINTING RESULT!n");
print (array);
}
你有两个错误
- 在你的内部for循环的末尾有一个分号
;
,所以循环根本没有运行。 - 如果你有
WIDTH - j
,你应该换成WIDTH - 1 -j
,因为最高指数是WIDTH - 1
。
此外,人类确实关心拼写,所以我将WIDHT
全局更改为WIDTH
以提高可读性。
这是固定的代码。
#include <stdio.h>
#include <stdlib.h>
#define HEIGHT 3
#define WIDTH 7
void print (char *imprimir)
{
int i,j;
for (i=0;i<HEIGHT;i++)
{
for (j=0;j<WIDTH;j++)
{
printf ("%2c",*(imprimir+(i*WIDTH)+j));
}
printf ("n");
}
}
int main ()
{
//FILLING THE ARRAY
char *array=malloc(WIDTH*HEIGHT);
int i,j;
for (i=0;i<HEIGHT;i++)
{
for (j=0;j<WIDTH;j++)
{
*(array+(i*WIDTH)+j)=(i*WIDTH)+j+'a';
}
}
print (array);
//TRYING TO REVERSE IT
char tmp;
for (i=0;i<HEIGHT;i++)
{
for (j=0;j<WIDTH/2;j++)
{
tmp=*(array+(i*WIDTH)+j);
*(array+(i*WIDTH)+j)=*(array+(i*WIDTH)+(WIDTH - 1 -j));
*(array+(i*WIDTH)+(WIDTH - 1 -j))=tmp;
}
}
printf ("PRINTING RESULT!n");
print (array);
}
至少是字符串for (j=0;j<WIDHT/2;j++);
中的错误因为你不想在那里有一个空循环,对吧?下面是你的代码:
#include <stdio.h>
#include <stdlib.h>
#define HEIGHT 3
#define WIDHT 7
void print (char *imprimir)
{
int i,j;
for (i=0;i<HEIGHT;i++)
{
for (j=0;j<WIDHT;j++)
{
printf ("%2c",*(imprimir+(i*WIDHT)+j));
}
printf ("n");
}
}
int main ()
{
//FILLING THE ARRAY
char *array=malloc(WIDHT*HEIGHT);
int i,j;
for (i=0;i<HEIGHT;i++)
{
for (j=0;j<WIDHT;j++)
{
*(array+(i*WIDHT)+j)= (i*WIDHT)+j+'a';
}
}
print (array);
//TRYING TO REVERSE IT
char *tmp=malloc(WIDHT);
for (i=0;i<HEIGHT;i++)
{
for (j=0;j<WIDHT/2;j++)
{
*tmp=*(array+(i*WIDHT)+j);
*(array+(i*WIDHT)+j)=*(array+(i*WIDHT)+(WIDHT-j-1));
*(array+(i*WIDHT)+(WIDHT-j-1))=*tmp;
}
}
printf ("PRINTING RESULT!n");
print (array);
}