C语言两道题目,用指针实现。求大神帮忙

2025-06-27 23:06:21
推荐回答(1个)
回答1:

void halfswap(int* a, int* b, int arrlen) {
  int *ae = a + arrlen / 2;
  while(a != ae) {
    int t = *a;
    *a = *b;
    *b = t;
    ++a, ++b;
  }
}

int findnum(int* a, int l, int n) {
  int* c = a;
  int* ae = a + l;
  while(a != ae) {
    if (*a == n)
      return a - c;
    ++a;
  }
  return -1;
}

void removeIndex(int* a, int l, int n) {
  int* ae = a + l - 1;
  a += n;
  while(a != ae)
    *a = *(a+1), a++;
}

void removeNum(int* a, int l, int n) {
  int i = findnum(a, l, n);
  if (i != -1) removeIndex(a, l, i);
}

#include 
int main() {
  int a[] = {1, 2, 3, 4};
  int b[] = {5, 6, 7, 8};
  int i;
  int *pa = a, *ae = a + 4;
  int *pb = b, *be = b + 4;
  halfswap(a, b, 4);
  while(pa != ae)
    printf("%d ", *pa), pa++;
  putchar('\n');
  while(pb != be)
    printf("%d ", *pb), pb++;
  putchar('\n');
  removeNum(a, 4, 3);
  pa = a, ae = a + 3;
  while(pa != ae)
    printf("%d ", *pa), pa++;
  putchar('\n');
  removeIndex(b, 4, 1);
  pb = b, be = b + 3;
  while(pb != be)
    printf("%d ", *pb), pb++;
}