当前位置: 首页 > news >正文

c语言 逆序存放并输出的题【基础】

前言:

好像做过这种题目,再做一遍

内容:

题目:逆序存放并输出的题

两种方式,通过值修改,通过指针变量修改

第一种,通过方式值修改,如果我没记错的话,数组实际就是地址,然后就是可以直接修改,

所以就算是在函数里,他也是直接通过地址,然后去寻找值去修改

但是,我想到了,这个方式和指针的方式不都是一样的吗,或者说这个不就是指针吗?

但是ai给我答案,我下面这种写法是不可取的,

🌰 错误案例演示
假设数组为 [1,2,3,4,5,6](zs=6):

你的代码:

i=0: 交换 0↔5 → [6,2,3,4,5,1]

i=1: 交换 1↔4 → [6,5,3,4,2,1]

i=2: 比较 &arr[2] < &arr[3] → 成立,交换后数组变为 [6,5,4,3,2,1]

i=3: 比较 &arr[3] < &arr[2] → 不成立,循环终止。
结果正确但过程存在越界风险!

修正代码:

明确交换 zs/2 = 3 次,安全可靠。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//函数实现的功能是,逆序存放,并输出
void reverse(int arr[], int zs)
{
	//直接利用值,进行交换
	int i = 0;
	//	for(i=0;i<zs/2;i++)
	 while(&arr[i] < &arr[zs-1-i])
		{
			int tmp = arr[i];
			arr[i] = arr[zs-1-i];
			arr[zs-1-i] = tmp;
			i++;
		}

}

int main()
{
	int i = 0;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int zs = sizeof(arr) / sizeof(arr[0]);

	reverse(arr,zs);

	for (i = 0; i < zs; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

正确的写法

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//函数实现的功能是,逆序存放,并输出
void reverse(int arr[], int zs)
{
	//直接利用值,进行交换
	int i = 0;
    for(i=0;i<zs/2;i++)
	{
		int tmp = arr[i];
		arr[i] = arr[zs-1-i];
		arr[zs-1-i] = tmp;

	}

 

第二种写法,利用指针的形式,

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//函数实现的功能是,逆序存放,并输出
void reverse(int arr[], int zs)
{


	//利用指针的方式进行交换,头指针和尾指针交换
	//int* start = arr;           //指向第一个元素
	//int* end = &arr[zs - 1];    //指向最后一个元素

	//while (end > start)
	//{
	//	int tmp = *start;      //利用临时变量存值,不能用地址存,执行下一步会改变的
	//	*start = *end;
	//	*end = tmp;
	//	end--;                 //地址前移
	//	start++;               //地址后移
	//}

}

int main()
{
	int i = 0;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int zs = sizeof(arr) / sizeof(arr[0]);

	reverse(arr,zs);

	for (i = 0; i < zs; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

相关文章:

  • hackmyvm-connection
  • 32、如何解决vector中删除元素导致的迭代器失效问题?
  • 【编译原理】一二章
  • 手机换IP有什么用?最新换IP方法
  • 【秣厉科技】LabVIEW工具包——OpenCV 教程(11):人脸检测与识别
  • Android第五次面试总结(网络补充)
  • Thinkphp指纹识别
  • Kubernets命名空间
  • QT6通过DeepSeek API上传附件实现
  • 【文件操作】IO流
  • MPLS基础---通俗易懂
  • 通过启用Ranger插件的Hive审计日志同步到Doris做分析
  • Android studio无法查看源码
  • 小酌SM2的背景、数字签名
  • 慕慕手记项目日记 首页数据的渲染,使用js 2025-3-16
  • 【Linux内核系列】:动静态库详解
  • 企业数据治理解决方案(46页PPT)(文末有下载方式)
  • CMAC算法原理
  • springboot 打包 failed with MalformedInputException: Input length = 1
  • SaaS系统的销售微服务与权限微服务边界设计
  • 机器人为啥热衷“搞体育”,经济日报:是向加速融入日常生活发起的冲锋
  • 世界数字教育大会发布“数字教育研究全球十大热点”
  • 俄乌直接谈判结束,乌称“毫无成果”
  • 博物馆日|为一个展奔赴一座城!上海171家博物馆等你来
  • 韧性十足的中国外贸企业:“不倒翁”被摁下去,还会再弹起来
  • 泽连斯基:乌代表团已启程,谈判可能于今晚或明天举行