C语言写的倒序小程序,麻烦大家看看

#include
#include
void reverse(int p,int *q)
{
int j=0,i=0,N=8,k=N/2;
for(;j<=N-1;j++) //雷德算法
{
*(p+j)=
(q+i);
while(k<=i)
{
i=i-k;
k=k/2;
}
i=i+k;
k=N/2;
}
}

int main()
{
int a[]={1,2,3,4,5,6,7,8};
int b,*c,i;
b=a;
c=(int
)malloc(sizeof(int)*8);
reverse(c,b);
for(i=0;i<8;i++)
printf("%d",*(c+i));
return 0;
}
编译没问题,运行也没提示出错,但就是一直卡在那,光标闪烁,没有显示结果,求大神解答

#include <stdio.h>
#include <stdlib.h>

void reverse(int *p,int *q) {
  int j=0,i=7,N=8;
  for(;j<=N-1;j++, i--) {
    *(p+j) = *(q+i);
  }
}
int main()
{
  int a[]={1,2,3,4,5,6,7,8};
  int *b,*c,i;
  b=a;
  c=(int *)malloc(sizeof(int)*8);
  reverse(c,b);
  for(i=0;i<8;i++)
    printf("%d ",*(c+i));
  putchar('\n');
  free(c);
  return 0;
}


反转没那么复杂吧

    while(k<=i)
    {
        i=i-k;
        k=k/2;
    }
    看看是不是死循环了。
 int a[]={1,2,3,4,5,6,7,8};
int b,*c,i;
b=a;//这编译没问题???
c=(int)malloc(sizeof(int)*8);//这也有问题吧

给C动态创建内存的时候出错了

跟二楼看法一样,楼主应该看看malloc函数

为什么我看到好多错误?
help.c: In function ‘void reverse(int, int*)’:
help.c:7:10: error: invalid type argument of unary ‘*’ (have ‘int’)
(p+j)=(q+i);
^
help.c: In function ‘int main()’:
help.c:20:4: error: invalid conversion from ‘int
’ to ‘int’ [-fpermissive]
b=a;
^
help.c:21:30: error: cast from ‘void*’ to ‘int’ loses precision [-fpermissive]
c=(int)malloc(sizeof(int)*8);
^
help.c:21:4: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]
c=(int)malloc(sizeof(int)*8);
^
help.c:22:14: error: invalid conversion from ‘int*’ to ‘int’ [-fpermissive]
reverse(c,b);
^
help.c:4:6: error: initializing argument 1 of ‘void reverse(int, int*)’ [-fpermissive]
void reverse(int p,int q) {
^
help.c:22:14: error: invalid conversion from ‘int’ to ‘int
’ [-fpermissive]
reverse(c,b);
^
help.c:4:6: error: initializing argument 2 of ‘void reverse(int, int*)’ [-fpermissive]
void reverse(int p,int *q) {
^

#include
#include
void reverse(int p,int *q)
{
int i=7,j,N=8,k=N/2;
for(j=0;j<=N-1;j++)
{
*(q+j)=
(p+i);
i--;
}
}
int main()
{
int a[]={1,2,3,4,5,6,7,8};
int *b,*c,i;

    b=a;
    c=(int*)malloc(sizeof(int)*8);

    reverse(b,c);
    for(i=0;i<8;i++)
        printf("%d\n",*(c+i));
    return 0;

}

这里面的问题感觉挺多的,比如:
数据定义:
int b,*c,i;
b=a;//而int a[]={1,2,3,4,5,6,7,8};定义为数组~a的话是数组首地址,是指向整型的指针,而b是整型数据,两者数据类型不匹配。改为int *b;

void reverse(int p,int *q);//这里是对一块内存空间p操作,所以不应该传值,二是传址,应写作void reverse(int *p,int *q);
感觉找出这个问题的bug不重要,因为很明显这里的好多变量概念、内存概念还是混乱的,没有建立起来,重要的是如何找出来。可以单步,看程序卡在哪,看相应的内存状态,变量的值是不是期望的~

首先你的程序有好多错误,编译无法通过,我调整好编译再debug了一遍,
通过后发现楼上说的你程序存在一个死循环,就是:
i = 1和k=1发生后再到i=0和k=0一直会无法退出while循环: k==i(0==0)

    while(k <= i)
        {
            i = i-k;
            k = k/2;
        }

给你一个简单的数组逆序:

 void invert(int a[],int n)
{
    int m = n/2,i;
    int temp;
    for (i=0;i<m;i++)
    {
        temp=a[i];
        a[i]=a[n-i-1];
        a[n-i-1]=temp;/*交换*/
    }
}

程序在main函数运行到reserve()函数之后,卡死在这段循环里面---> while(k<=i) { i=i-k;
k=k/2; }然后就没有执行后面打印出来的程序了。