指针数组的有趣程序【C语言】

news2024/12/27 13:30:44

文章目录

  • 指针数组的有趣程序
    • 指针数组是什么?
    • 指针数组的魅力
    • 指针数组的应用
    • 示例:
      • 命令行计算器
      • 有趣的颜色打印
    • 结语

指针数组的有趣程序

在C语言的世界里,指针是一种强大的工具,它不仅能够指向变量,还能指向数组,甚至是函数。

指针数组是什么?

指针数组,顾名思义,就是一个数组,其元素都是指针。在C语言中,指针数组通常用来存储一系列地址,这些地址可以是变量、数组、函数或其他任何类型的数据。

指针数组的魅力

指针数组之所以有趣,是因为它提供了一种灵活且高效的方式来管理和操作数据。想象一下,如果你有一个指针数组,每个指针都指向一个不同的字符串,你可以轻松地遍历这些字符串,或者根据用户的选择来显示特定的字符串。

指针数组的应用

指针数组在C语言编程中有着广泛的应用。以下是一些常见的应用场景:

  1. 命令行参数:在编写命令行程序时,指针数组可以用来存储传递给程序的参数。
  2. 字符串处理:在处理字符串时,指针数组可以用来存储字符串的各个部分。
  3. 动态内存分配:指针数组可以用来动态分配和释放内存,这在处理动态数据结构时非常有用。
  4. 函数指针数组:在实现回调函数或策略模式时,函数指针数组可以用来存储不同的函数,以便在运行时选择执行。

示例:

命令行计算器

让我们通过一个简单的命令行计算器程序来展示指针数组的实际应用。这个程序允许用户选择不同的数学运算,并输入两个数字来执行计算。

#include <stdio.h>

// 定义函数指针类型
typedef double (*Operation)(double, double);

// 定义四个函数指针,分别对应加、减、乘、除
double add(double a, double b) { return a + b; }
double subtract(double a, double b) { return a - b; }
double multiply(double a, double b) { return a * b; }
double divide(double a, double b) { return a / b; }

// 定义一个函数指针数组
Operation operations[] = {add, subtract, multiply, divide};

int main() {
    // ... 省略代码 ...
}

在这个程序中,我们定义了一个函数指针数组operations,它包含了指向四个不同数学运算函数的指针。用户可以通过输入选择不同的运算,程序会根据用户的选择调用相应的函数指针来执行计算。

有趣的颜色打印

用数组指针和ANSI颜色代码实现的一个小玩应

#include <stdio.h>

int main() {
	// 定义一个指针数组,每个指针指向一个字符串
	const char *colors[] = { "Red", "Green", "Blue", "Yellow", "Purple" };
	int size = sizeof(colors) / sizeof(colors[0]);

	// 打印所有颜色
	printf("All colors:\n");
	for (int i = 0; i < size; i++) {
		printf("\033[3%dm%s\033[0m\n", i + 1, colors[i]); // 使用ANSI颜色代码
	}

	// 提示用户输入颜色索引
	int choice;
	printf("\nEnter the index of the color you want to see (1-%d): ", size);
	scanf("%d", &choice);

	// 检查用户输入是否有效
	if (choice >= 1 && choice <= size) {
		// 使用ANSI颜色代码打印用户选择的颜色
		printf("\033[3%dm%s\033[0m\n", choice, colors[choice - 1]);
	}
	else {
		printf("\nInvalid choice. Please enter a number between 1 and %d.\n", size);
	}

	return 0;
}

这个程序是一个简单的控制台应用程序,它使用数组指针来管理一组字符串,这些字符串代表不同的颜色名称。程序通过数组指针遍历这些颜色,并允许用户通过输入索引来选择并显示特定的颜色。

在这里插入图片描述

结语

指针数组是C语言中一个非常强大的特性,它提供了一种灵活且高效的方式来管理和操作数据。通过上述示例,我们可以看到指针数组在命令行计算器程序中的应用,还有更多有趣的操作等着我们去探索

神子求赞
给个免费的赞吧,蟹蟹了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1552113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenHarmony实战开发-List组件的使用之设置项

介绍 在本篇CodeLab中&#xff0c;我们将使用List组件、Toggle组件以及Router接口&#xff0c;实现一个简单的设置页&#xff0c;点击将跳转到对应的详细设置页面。效果图如下&#xff1a; 相关概念 CustomDialog&#xff1a;CustomDialog装饰器用于装饰自定义弹窗。List&…

支付系统就该这么设计,稳的一批!!

Part one 支付系统总览 核心系统交互 业务图谱 Part two 核心系统解析 交易核心 支付核心 渠道网关 资金核算 Part three 服务治理 平台统一上下文 数据一致性治理 DB拆分 异步化 Part four 生产实践 性能压测 稳定性治理 核心链路分离 服务依赖降级 前言 支付永…

2024.3.21|华北水利水电大学江淮校区ACM社团训练赛

2024.3.21|华北水利水电大学江淮校区ACM社团训练赛 1.数字拆解 2.矩阵修改 3.因子数 4.回文数 5.中位数 心有猛虎&#xff0c;细嗅蔷薇。你好朋友&#xff0c;这里是锅巴的C\C学习笔记&#xff0c;常言道&#xff0c;不积跬步无以至千里&#xff0c;希望有朝一日我们积累的滴…

敏捷BI看永洪科技,连续六届BI商业智能第一名

敏捷性对BI商业智能的重要性不言而喻。在一个快速变化的商业环境中&#xff0c;企业需要敏锐的洞察力和及时的反应能力来应对不断涌现的挑战和机遇。敏捷BI的核心理念是在保持质量的前提下&#xff0c;以快速、灵活、创新的方式获取、分析和利用数据&#xff0c;为企业决策提供…

并发编程之Callable方法的详细解析(带小案例)

Callable &#xff08;第三种线程实现方式&#xff09; Callable与Runnable的区别 Callable与Runnable的区别 实现方法名称不一样 有返回值 抛出了异常 ​class Thread1 implements Runnable{Overridepublic void run() { ​} } ​ class Thread2 implements Callable<…

【数学符合】

数学符合 ■ ∑ ■ ∑

中国国际通信大会2024|中国通信展览会|通信展览会

中国国际通信大会2024|中国通信展览会|通信展览会 中国国际信息通信展览会&#xff08;ICT展&#xff09;是亚太地区最具影响力的信息通信技术盛会之一。每年一度的ICT展汇聚了来自全球各行各业的专业人士&#xff0c;为各领域的科技公司、创新企业以及技术爱好者们提供一个难得…

Aurora插件安装

介绍 Latext是一种基于TEX的排版系统。 CTeX中文套装是基于Windows下的MiKTeX系统&#xff0c;集成了编辑器WinEdt和PostScrip处理软件Ghostscript和GSview等主要工具。CTeX中文套装在MikTeX的基础上增加了对中文的完整支持。 CTeX&#xff1a; CTeX套装 - CTEX 下载安装 然后…

libVLC 捕获鼠标、键盘事件

在实现播放器的时候&#xff0c;我们需要捕获键盘、鼠标事件进行视频快进、快退&#xff0c;或者双击全屏/退出全屏窗口、鼠标右键弹出菜单栏。默认情况下&#xff0c;在使用libVLC库的时候&#xff0c;我们无法捕获这些事件&#xff0c;因为我们将Qt的视频窗口传递给了libVLC。…

游泳防水耳机什么牌子好?内行人精选4个精品,不入后悔!

游泳是我们生活中一项非常重要的运动&#xff0c;它不仅可以锻炼我们的身体&#xff0c;还可以让我们放松心情。然而&#xff0c;在水下听音乐或接受指导&#xff0c;常常因为防水问题而变得困难重重。为了让大家在游泳时也能享受到美妙的音乐或者清晰的语音指导&#xff0c;我…

16.JRE和JDK

程序员在编写代码的时候其实是需要一些环境&#xff0c;例如我们之前写的HelloWorld。我们需要的东西有JVM、核心类库、开发工具。 1、JVM&#xff08;Java Virtual Machine&#xff09;&#xff1a;Java虚拟机&#xff0c;真正运行Java程序的地方。没有虚拟机&#xff0c;代码…

Spark-Scala语言实战(6)

在之前的文章中&#xff0c;我们学习了如何在scala中定义与使用类和对象&#xff0c;并做了几道例题。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 Spark-S…

springboot+mybatis快速搭建入门项目

简介 本文介绍了如何使用idea搭建一个简易springboot后端项目&#xff0c;该项目可以接受前端http请求&#xff0c;经由服务端并访问数据库&#xff0c;最后返回查询结果。该简易项目从零开始搭建&#xff0c;涵盖controller/service/dao层&#xff0c;简单易懂易上手&#xf…

离心式风机运行效率测算

1.总压静压动压&#xff1b; 2.动压0.5空气体密度风速2&#xff1b; 风机所需功率P&#xff08;KW&#xff09;&#xff1a;PQp/&#xff08;36001000η0η1&#xff09; Q—风量&#xff0c;m3/h&#xff1b; p—风机的全风压&#xff0c;Pa&#xff1b; η0—风机的内效率&a…

C++ 控制语句(二)

一 break continue和goto语句 1 break语句 在switch语句中&#xff0c;分隔case子句&#xff0c;跳出switch语句。 在循环语句中可以立即终止循环语句的执行。 2 continue语句 功能:在一次循环过程中,跳过continue语句以下的语句,直 接进入下一次循环操作。 3 goto语句 …

Java学习之方法

目录 方法 方法声明格式&#xff1a; 调用方式&#xff1a; 详细说明 示例 --方法的声明及调用 语句块 练习 方法的重载(overload) 构成条件 示例 --方法重载 递归结构 缺陷 方法 方法(method)&#xff1a;一段用于完成特定功能的代码片段&#xff0c;类似于其他语…

【2024年软考】老伙计的软考之路(1)软考报名

一、2024软考改革 仔细看工信部发的软考通知附件&#xff0c;对比上半年和下半年的考试科目变化。 比如高级&#xff1a; 1、信息系统项目管理师从之前的一年考两次变成了今年上半年只考一次。 2、网络规划设计师、系统规划与管理师变成下半年只考一次。 剩下的自己对比着…

Qt 多线程QThread的四种形式

重点&#xff1a; 1.互斥量&#xff1a;QMutex配套使用&#xff0c;lock(),unlock(),如果一个线程准备读取另一个线程数据时候采用tryLock()去锁定互斥量&#xff0c;保证数据完整性。 QMutexLocker简化版的QMutex,在范围区域内使用。 QMutex mutex QMutexLocker locker(&…

Vivado使用(2)——综合运行与OOC

目录 一、综合运行 二、OOC 2.1 如何设置 OOC 模块 2.2 存根文件和黑盒属性 2.3 使用限制 2.4 另一种设置方法 一、综合运行 一个“运行&#xff08;run&#xff09;”是指定义和配置设计在综合过程中的各方面&#xff0c;包括&#xff1a;使用到约束&#xff0c;针对的…

使用 OpenOCD 来调试 STM32

STM32 在 Windows 上的交叉编译二 调试 在上一篇博客 《在Windows上交叉编译STM32(环境搭建)》 &#xff0c;已经让 CubeMX 生成的工程成功编译&#xff0c;并下载到板子上了。 这篇博客主要继续介绍接下来的步骤&#xff0c;调试。硬件是使用的 ST-LINK &#xff0c;别的也无…