C语言如何利用数组存储“变量”

【C语言】数组 数组 阅读详情
AI摘要

本文介绍如何在C语言中使用指针数组来存储并动态修改变量值,解决传统数组只能存储常量的问题,适用于需要按需修改数组中数据值的场景。

数组简介

众所周知,数组仅能存储常量数据,包括数字常量、字符常量、字符串常量。但在实际应用中,可能会遇到需要按需修改数组中数据值的需求,此时又应该如何解决呢?通过一段时间的测试验证,解决了项目中的该需求,于是便产生了本篇文章,也是本人的第一篇技术博客。如果有不足或错误之处,还望读者可以不吝赐教,在下不甚感激!

数字常量

C语言利用数组保存数字常量是一种非常常见的方式,比如:int array[ ] = {0,1,2,3,4,5};而在实际应用中,也经常会使用该方法,比如:将数组中的数据保存至非易失性存储设备(比如EEPROM)中,便于程序的后续使用。

字符常量

C语言利用数组保存字符常量的方式在嵌入式领域的应用并不是很多,其形式如下:char char_array[5] = {'C','h','i','n','a'};上例则表明数组名为char_array的数组依次保存了’C’、‘h’、‘i’、‘n’、'a’这5个字符常量。

字符串常量

由于C语言不支持字符串操作,所以不支持诸如C++的string关键字用于定义字符串变量。但是在C语言中,可以利用字符串数组或者指针定义一个字符串变量。如下所示:
字符串数组形式:char string_array[] = "I love China!";
指针形式:char * pString = "I love China!";需要注意的是,由于’\0’作为字符串的结束标志,所以无论是使用字符串数组形式或者指针形式定义一个字符串,系统均会在字符串的末尾自动加上一个’\0’。所以上述子字符串的实际长度总是比""号中的字符数量多1。

背景

在现实工作过程中,外部需要读取数组中的某个数据,但同时,通过操作后台,该数据需要按需进行改变。如果使用上面说的三种数组形式,无法满足该要求。

解决方法

通过查询资料以及测试验证,如果使用指针数组便可以解决该问题。指针数组,顾名思义便是存储指针(即地址)的数组。而在实际应用中,通过指针的解引用操作,便可以实现利用数组存储“变量”的要求。具体方法如下所示:

//定义三个变量
int array1 = 100;
int array2 = 200;
int array3 = 300;
//定义一个指针数组村存储上述变量的地址
int * p_array[3] = {&array1,&array2,&array3};
printf("array1 = %d\n",*p_array[0]);//100
printf("array2 = %d\n",*p_array[1]);//200
printf("array3 = %d\n",*p_array[2]);//300
array1 = 60;
array2 = 90;
array3 = 120;
printf("array1 = %d\n",*p_array[0]);//60
printf("array2 = %d\n",*p_array[1]);//90
printf("array3 = %d\n",*p_array[2]);//120

在实际应用中,通过对数组中对应元素进行解引操作,便可以获得该变量的值,从而实现了数组存储“变量”的要求。

说明

本文所描述的利用数组存储“变量”只是为了解决工作中遇到的问题。实际上,数组仅能存储常量,并不能存储实际意义上的变量,读者一定不要混淆。比如:

int num6 = 50;
int array[3] = {10,num6,20};

如果按照上面的代码初始化数组,编译器一定会报错,会提示数组仅能存储常量数据。

一文搞懂C语言如何用指针来代替变量和数组进行数据的存储 既然未初始化的指针指向的地址是随机的,那么就可以用这个地址来存储数据。我们定义了未初始化的指针之后,可以用malloc函数,为这个指针分配空间。即,指针就会指向该空间的首地址。如果这个空间大小刚好是n个int类型的大小的话,这个指针就相当于一个大小为n的int数组,可以用来存储数据。这种方式,就不是野指针的用法了,提倡大家用这种方法。但是所存储的数据大小最好不要超过分配的空间的大小,不然就和野指针一样,可能会发生内存安全问题,导致异常终止。1、指针可以作为数组用,数组号表示指针基地址偏移。 阅读详情

相关推荐

C语言变量存储顺序

作者:禅与计算机程序设计艺术 1.简介 C语言是一种静态强类型编程语言,在变量声明时指定变量的存储位置(static/auto/register)、变量的数据类型及其大小等属性,在编译时就确定了变量的内存布局。对于初级程序员来说,了解变量的存储顺序,对编写高效、正确的代码至关重要。本文将详细阐述C语言变

AI天才研究院 954

C语言基础Day4-数组

C语言基础Day4-数组

qq_44653420的博客 4193

逆向工程实战:手把手教你破解药监局网站的动态数据加载机制(Python+Chrome开发者工具)

本文详细介绍了如何利用Python和Chrome开发者工具逆向破解药监局网站的动态数据加载机制。通过分析Ajax请求、解析JSON响应数据以及处理动态参数,帮助开发者高效采集动态加载内容,适用于爬虫开发与数据分析场景。

weixin_30832143的博客 67

输入变量给数组

#include<stdio.h> void main() { int a[10], i; // 输入10个数,放入数组 for(i=0; i<10; i++) { scanf("%d", &a[i]); } // 输出 for(i=0;i<10;i++) { printf("%d\n", a[i]); } }

qq_27744829的博客 1300

保姆级教程:用ncnn把自训练的YOLOv8模型塞进Android App(附完整代码)

本文提供了一份详细的保姆级教程,指导开发者如何将自训练的YOLOv8模型通过ncnn框架部署到Android应用中。教程涵盖环境配置、模型训练与转换、Android工程集成及性能优化等全流程,并附完整代码实现,帮助开发者快速掌握移动端AI模型部署技术。

weixin_42659194的博客 255

医疗大模型实战——从零构建MedicalGPT全流程解析

本文详细解析了从零构建医疗大模型MedicalGPT的全流程实战。基于Qwen-7B模型与约195万条中文医疗数据,完整复现了增量预训练、监督微调与偏好对齐三大核心环节,并分享了如何在有限硬件资源下实现高效训练与部署,为开发者提供了可复现的医疗AI项目实战指南。

weixin_29193259的博客 553

如何将变量放入数组中(约瑟夫环实例)

如何将变量放入数组中(约瑟夫环实例)

Scholar618的博客 5347

ArcGIS将以大西洋居中的世界地图以中国居中显示

ArcGIS将以大西洋居中的世界地图以中国居中显示 并进行经纬度格网的调整输出

jiekeheiguanglan的博客 5704

C语言使用变量存储字符串

C语言使用变量存储字符串

司徒荆的博客 5574

3D视觉实战之双目相机物体尺寸实时测量

视差图滤波能够将稀疏视差转变为稠密视差,并在一定程度上降低视差图噪声,改善视差图的视觉效果,但是比较依赖初始视差图的质量。的目标是获得左右两个相机的内参、外参和畸变系数,其中内参包括左右相机的fx,fy,cx,cy,外参包括左相机相对于右相机的旋转矩阵和平移向量,畸变系数包括径向畸变系数(k1, k2,k3)和切向畸变系数(p1,p2)以及其他一些畸变类型。:相比于昂贵的专业设备,便宜的双目摄像头可以显著降低成本,使得实时点云生成技术更加普及和经济实惠。

qq_53545309的博客 2098

YOLO26 标签分配机制:STAL 小目标感知分配策略

YOLO26提出的STAL标签分配策略通过尺度感知机制优化了小目标检测性能。该方法根据目标面积将检测对象分为小、中、大三类,分别采用差异化的分配参数(TopK数量、IoU阈值和中心度权重),特别是对小目标采用更宽松的匹配条件和更高的中心度权重。实验结果表明,STAL策略显著提升了小目标检测精度(AP_small),同时保持了整体检测性能(mAP),为解决目标检测中尺度不平衡问题提供了有效方案。

一键难忘的博客 786

C语言变量的存储方式(auto register static)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warn.

qq_51163115的博客 2045

VTK 显示大量点云数据及交互(点云拾取、着色、测量等)功能

VTK (Visualization Toolkit) 是一个强大的开源可视化库,非常适合处理点云数据。下面将介绍如何使用 VTK 显示大量点云数据,并实现点云拾取、着色、测量等功能。

深之JohnChen的专栏 1994

c语言之“数组”初级篇

牛牛又和大家见面了,本篇牛牛要讲的内容是c语言中有关数组的内容。欢迎大家一起学习,共同进步。

@初阶牛的博客 3190

《UDS协议从入门到精通》系列——图解0x23:通过地址读取内存

如何读取ECU中指定内存地址的数据?图解UDS 0x23服务带你快速上手!!

车载系统攻城狮 2622

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C语言的变长数组

在C99标准之前的C89,C90,如果一个数组大小是变量定义,则在程序运行前不能确定数组大小,也就无法申请,故不允许。因此,程序在离开变长数组定义所在的块、函数时,变长数组占用的内存空间会被自动释放,不必使用free()。变长数组中的“变”不是指可以修改已创建数组的大小,一旦创建了变长数组,它的大小则保持不变。这里的“变”指的是在创建数组时,可以使用变量指定数组的长度。而const修饰符在星号之后,则表示指针在被声明后指向内容可以变,指向地点不能变,即只能指向这个获取的空间,完全符合数组的性质。......

a只如初见的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C语言变量名存储在哪里

int a = 1; 这是一个很简单的c语言代码,很多了解过c语言的小伙伴都知道这个语句的作用是声明了一个int型的变量a,并且赋值为1,通过指针我们知道1是存储在a所指的那个内存中的,那么a存储在哪里呢? c语言内存管理 为了说明这个问题,先简单介绍下c语言里面的内存基本概念 1.栈区(stack)— 由编译器自动分配释放 ,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。该栈的最大存储是有大小的,该值固定,超过该大小将会造成栈溢出。 2.堆区(heap) — 一般由程序员分配.

qq_40741513的博客 4022

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【精通C语言】一图搞清C语言到底有多少种变量存储类别

本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 文章目录C变量存储类别 C变量存储类别 存储类别 存储期 作用域 链接 声明方式 自动 自动 块 无 块内 寄存器 自动 块 无 块内,使用关键字register 静态外部链接 静态 文件 外部 所有函数外 静态内部链接 静态 文件 内部 所有函数外,使用关键字static 静态无链接 静态 块 无 块内,使用关键字static .

从善若水的博客 1700

c语言——数组

这个连续增长与数组的类型有关,当数组类型为int类型,每个数组中的元素在内存中都有一个地址,因为int类型是4个字节,所以随着下标增长,地址也很会变(以4个字节一次一次变)每一个元素都有一个下标,这都是从0开始数的,比如就像上面有10个元素,它们的下标不是1到10而是0到9,这是与我们习惯上不同的一个点需要牢记。一维数组中将其中数据看作元素,二维数组则是将一位数组看作元素,依次类推,多维数组则是将前一个数组看作元素的数组。type指定数组存放数据类型,这类型可以是我们常见的类型也可以是我们自定义的类型。

2403_87827685的博客 2261

C语言——详解数组

本文主要介绍了一维数组与二维数组的创建、初始化、输入与输出和内存存储,以及变长数组等。

yusjushd的博客 1027

C语言——数组

数组是一组相同类型元素的集合数组分为一维数组和多维数组,多维数组一般比较多见的是二维数组。

m151213的博客 1678

【C语言 |数组】C语言数组详解

数组作为C语言比较重要的一部分,本篇文章对数组进行一个梳理跟总结数组是一组相同类型元素的集合,数组本质上是一段连续的内存空间使用数组的索引值访问数组中的每一个元素数组中的每一个数据元素被存储在一段连续的内存空间中一、一维数组。

YKX0000的博客 1928

C语言中数组是不是一个变量,数组在c语言中是什么

在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。关于C语言中数组的定义如果在参数表中,int [],实际会被转换成int *。不信你可以试试这个程序:#include void f(int b[10]){ printf("%d\n",sizeof(b...

weixin_35692051的博客 2771

通过一个实例理解C语言中“函数”“变量”

通过一个简单的实例来初步了解C语言中的“函数”“变量”以及“大程序结构” 通过在error中成长,可以让我收益良多

sunmo0n的博客 1951

c语言 变量存储位置,C语言变量存储布局

C语言变量存储布局C语言变量是怎么储存的大家了解吗?下面一起去了解一下C语言变量存储布局是怎么样的吧,希望对大家有帮助!1.正文段(.text):机器指令部分,是只读的,防止意外的修改;2.初始化数据段(.data):保存程序中的全局变量且已被赋初值或在函数中被static修饰的且已被赋初值的变量;3.未初始化数据段(.bss):保存程序中的全局变量且未被赋初值或在函数中被static修饰的且未被...

weixin_35715474的博客 943

C语言之变量的存储类型

在C语言中,对变量的存储类型说明有以下四种:https://www.cnblogs.com/grooovvve/p/9782550.html auto     自动变量 register   寄存器变量 extern    外部变量 static    静态变量 自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式。 在介绍了变量的存储类型之后,可以知道对一个变量的说明不仅应说明其数据类型,还应说明其存储类型。 因此变量说明的完整形式应为:存储类型说明符数据类型说明符变量..

唐攀的博客 2322
下一篇: DSP28377D开发笔记(一) 初步认识DSP28377D芯片
「已注销」
博客等级 码龄7年 49粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值