数组简介
众所周知,数组仅能存储常量数据,包括数字常量、字符常量、字符串常量。但在实际应用中,可能会遇到需要按需修改数组中数据值的需求,此时又应该如何解决呢?通过一段时间的测试验证,解决了项目中的该需求,于是便产生了本篇文章,也是本人的第一篇技术博客。如果有不足或错误之处,还望读者可以不吝赐教,在下不甚感激!
数字常量
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};
如果按照上面的代码初始化数组,编译器一定会报错,会提示数组仅能存储常量数据。