利用指针变量将一个数组中的数据反向输出。 用函数表示

60 阅读3分钟
// 利用指针变量将一个数组中的数据反向输出。 用函数表示

方法1//这种方法直接是在原数组中改变其值(修改了原数组);
void input(int *p, int len) // arr是第一个元素的地址,所以要用指针去接收
{
  int *start = p;//初始指针,指向的是数组中第一个元素的地址
  int *end = p + len - 1;//尾指针,指向的是数组中最后一个元素的地址
  int temp;//因为要交换数组中的元素,所以声明一个变量(直接改变数组中元素的值,所以用声明一个变量,要是指针的指向进行改变,则声明的是int *temp);

  while(start < end) 
  {
    temp   =  *start;
    *start =  *end;
    *end   =  temp; 
    start++;//每执行完一次,初始指针+1(后移)
    end--;//每执行完一次,尾指针-1(前移)
  }

}

#include <stdio.h>
int main()
{
  // 1.首先要有一个数组
  int arr[] = {11,22,33,44,55,66,77,88,99};
  // 2.计算数组的大小
  int len = sizeof(arr) / sizeof(arr[0]);

  // 3.打印原数组
  printf("原数组: ");
  for (int i = 0; i < len; i++)
  {
    printf("%d ", arr[i]);//下标法
  }
  printf("\n");

  // 4.函数的调用
  input(arr,len);

  //5.由于要打印数组中的元素,所以要遍历打印
  printf("反转后: ");
  for(int i = 0; i < len; i++)
  {
    printf("%d ",*(arr + i)); //指针法(地址法);
  }


  return 0;
}
#include <stdio.h>


方法2:
// 函数:将原数组反转,并存储到新数组
void reverseToNewArray(const int *src, int *dest, const int len) // src(原数组)、dest(目标数组)、len(数组长度)
{
  const int *start = src;         // 指向原数组首元素(start这个指针变量里面存的是原数组首元素的地址)
  const int *end = src + len - 1; // 指向原数组末元素 (end这个指针变量中存储的是原数组末元素的地址)
  int *destPtr = dest;            // 指向目标数组的当前位置(destPtr这个指针变量中存储的是新数组的第一个元素的的地址);

  // 从后往前遍历原数组,存储到目标数组  //从原数组末尾开始遍历,逐个存入新数组
  // 原数组 arr 保持不变,仅读取数据。 //反转后的数据存储在 reversedArr 中。
  while (end >= start)
  {
    *destPtr = *end; // 将原数组的末尾元素存入新数组
    destPtr++;       // 新数组指针后移 //目标数组指针后移(准备存下一个数)。
    end--;           // 原数组指针前移 //原数组指针前移(准备取前一个数)
  }
}

int main()
{
  int arr[] = {11, 22, 33, 44, 55, 66, 77, 88, 99};
  const int len = sizeof(arr) / sizeof(arr[0]); //const 表示不会修改原数组
  int reversedArr[len]; // 新数组,用于存储反转后的数据 //定义一个新数组 reversedArr,大小和原数组 arr 相同。

  // 打印原数组
  printf("原数组: ");
  for (int i = 0; i < len; i++)
  {
    printf("%d ", arr[i]);
  }
  printf("\n");

  // 反转并存储到新数组
  reverseToNewArray(arr, reversedArr, len);

  // 打印反转后的新数组
  printf("反转后: ");
  for (int i = 0; i < len; i++)
  {
    printf("%d ", reversedArr[i]);
  }
  printf("\n");

  return 0;
}
方法3: 直接反向遍历原数组
#include <stdio.h>

int main() {
    int arr[] = {11, 22, 33, 44, 55, 66, 77, 88, 99};
    const int len = sizeof(arr) / sizeof(arr[0]);

    // 打印原数组
    printf("原数组: ");
    for (int i = 0; i < len; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    // 直接反向遍历并打印
    printf("反向输出: ");
    for (int i = len - 1; i >= 0; i--) // 从最后一个元素开始
    { 
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

image.png