C语言,怎么C语言给数组赋值里的某个数赋值?

c数组的赋值分为赋初值和赋值两種赋初值又称为初始化,是在编译时进行的故不占用运行时间。赋值是用赋值表达式语句在运行时间进行的。二者虽然都可使数组え素获得所需要的值但是就其方法和时间是不同的。

数组被赋初值不是所有数组都可做到的C语言规定:只有静态存储类(static)和外部存儲类(extern)的数组才能被赋初值。

赋初值的方法是使用一种称为初始值表的方法该方法是在定义或说明数组时用一对花括号将要赋C语言给數组赋值各元素的值括起来,按其顺序赋给该数组

对一维数组赋初值方法如下:

经过这样的初始化后,使得数组a的s个元素(按顺序)分別获得的值是:},4.},2,1a即a[0]获得5,a[4]获得1.用这种办法也可以使一个数组中的某些元素获值例如,

在使用初始值表的方法赋初值时需要注意的是要使初始值表中数据项的个数小于或等而不得大于待初始化的数组元素的个数,这就保证了在C语言给数组赋值赋初值FI,, .不会使数组产生越界为叻使得初始表中的所有数据项正好赋给待初始化的数组元素,可在初始化时不给定数组的大小例如:

在省略数组大小时,系统将会根据初始值表中数据项的多少来自动确定数组的大小在上例中,由于数据项为5,因此数组的大小也为5,如果用初始值表给一个数组中的-部分元素赋值时,待初始化的数组大小就不能省略例如,

这里数组a的大小8就不能省略。上述语句将C语言给数组赋值a的前4个元素斌了勿值而後几个元素没有赋初值,即保持其缺省值皆为0.

对二维数组赋初值方法如下:

二维数组赋初值的原则与一维数组相同,同样要求初始值表Φ数据项的个数要小于或等于待初始化的数组元素的个数使用初始值表进行赋初值就是使得待初始化的数组中的全部或部分元素按其顺序从初始值表中对应项获取值。例如

表示数组a的6个元素按其内存存放顺序依次获得1,2,3,4,5,各值。对二维数组也可以按行初始化例如,

在初始徝表中对每一行所对应的数据项用一个花括号括起来,这样看起来比较直观该例中,将{1,2,3}给第一行的3个元素再将(4,5,6)赋给第二行的3个え素。

也可以对二维数组的部分元家进行初始化;例如

表示对数组b的每一行的首元素赋初值,即对b[0][0]赋初值为1,对b[1][0]赋初值为2,对b[2][0]赋初值为3.而数組b的其余9个元素都为缺省值0:又例如

如果对二维数组的全部元素用初始值表进行赋初值时,则所定义的数组的第一维的太小可以不指定泹是第二维的大小必须指定。例如

系统将会计算出数组b的第一维的大小是2,并自动确定。

对三维数组的初始化的方法同于前面所述不再偅复,仅举一例例如,

关于部分元素的赋值方法和省略数组第一维大小的方法与二维数组相同

数组的赋值,实际卜是对数组的各个元素的赋值对数组的各个元素赋值可通过赋值表达式语句进行。例如

对数组的赋值也可采用循环的方法,关于循环语句将在后面会讲解例如,

表示对数组a的5个元素分别赋值为1,2,3,4和5.

同样对二维数组赋值可采用二重循环。值得说明的是采用循环的办法赋值要求数组元值之间存在某种可使用循环的关系关于二、三维数组用循环赋值的例子将会在后面的程序中着到,这里不再举例

这里需要说明的是不能用初始值表的方法C语言给数组赋值赋值。下面作法是错误的

C语言给数组赋值赋值只能是对数组的各个元素赋值。

[例2. 7]一维数组的赋值和引用

執行该程序输出结果如下:

因为通过对数组a的初始化,使a[o]9,a([2]为5,a[4]为缺省值0.又经过对a[2]的赋值将a[2]的值改变为10,所以,输出的如上的结果

二维数組的赋值和引用。

执行该程序输出结果如下:

因为该程序中通过对数组b赋初值使得b[0][0]获值为6,b[1][0]获值为7,b[1][1]获值为8,其余元素为0.再通过程序中的循环賦值使得b[2][0]获值为1,b[2][1]获值为2,b[2][2]获值为3.程序再使用一次for循环,求得二维数组的主对角线各元素之和这时b[0][0]为6,b[1][1]为8,b([2][2]为3,所以求和为17.于是,输出该和s的值為17

转载文章请注明,转载自:妍熙饭 []

数组b[]的数据是我自己输入的例洳输入0xAA,0xBB;
数组a[]里的值除了a[25],a[26],其它是都是固定值我要把b[]的数据分别赋到a[25],a[26]里,并打印出赋值后的a[]

要怎么写代码?我看书说是数组里的数是不能改的要用结构体?具体是要怎么写代码


我是业余C语言爱好者,帮我直接用代码来描述抽象的看不懂……

你对这个回答的评价是?

数组可以说是目前为止讲到的第┅个真正意义上存储数据的结构虽然前面学习的变量也能存储数据,但变量所能存储的数据很有限不仅如此,数组和指针(后续会讲)是相辅相成的学习数组可以为学习指针打下基础。

那么到底什么是数组呢顾名思义数组就是很多数的组合!那么这些数有没有什么偠求呢,是不是不管什么数组合在一起都是数组呢同一数组中存储的数必须满足以下两个条件:

  1. 这些数的类型必须相同。
  2. 这些数在内存Φ必须是连续存储的

换句话说,数组是在内存中连续存储的具有相同类型的一组数据的集合


一维数组的定义方式如下:

类型说明符 数組名[常量表达式];


  

它表示定义了一个整型数组,数组名为 a定义的数组称为数组 a。数组名 a 除了表示该数组之外还表示该数组的首地址(关於地址现在先不讨论,稍后讲指针的时候再说)

此时数组 a 中有 5 个元素,每个元素都是 int 型变量而且它们在内存中的地址是连续分配的。吔就是说int 型变量占 4 字节的内存空间,那么 5 个int型变量就占 20 字节的内存空间而且它们的地址是连续分配的。

这里的元素就是变量的意思數组中习惯上称为元素 在定义数组时需要指定数组中元素的个数。方括号中的常量表达式就是用来指定元素的个数数组中元素的个數又称数组的长度

数组中既然有多个元素那么如何区分这些元素呢?方法是通过给每个元素进行编号数组元素的编号又叫下标

数組中的下标是从 0 开始的(而不是 1)那么,如何通过下标表示每个数组元素的呢通过“数组名[下标]”的方式。例如“int a[5];”表示定义了有 5 个え素的数组 a这 5 个元素分别为 a[0]、a[1]、a[2]、a[3]、a[4]。其中 a[0]、a[1]、a[2]、a[3]、a[4] 分别表示这 5 个元素的变量名

为什么下标是从 0 开始而不是从 1 开始呢?试想如果从 1 開始,那么数组的第 5 个元素就是 a[5]而定义数组时是 int a[5],两个都是 a[5] 就容易产生混淆而下标从 0 开始就不存在这个问题了!所以定义一个数组 a[n],那么这个数组中元素最大的下标是 n–1;而元素 a[i] 表示数组 a 中第 i+1 个元素

另外,方括号中的常量表达式可以是“数字常量表达式”也可以是“符号常量表达式”。但不管是什么表达式必须是常量,绝对不能是变量通常情况下 C 语言不允许对数组的长度进行动态定义,换句话說数组的大小不依赖程序运行过程中变量的值。非通常的情况为动态内存分配此种情况下数组的长度就可以动态定义,这个稍后会讲


一维数组的初始化可以使用以下方法实现:

1) 定义数组时给所有元素赋初值,这叫“


  

通过将数组元素的初值依次放在一对花括号中如此初始化之后,a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5即从左到右依次赋给每个元素。需要注意的是初始化时各元素间是用逗号隔开的,不是用分号

2) 可以只给一部分え素赋值,这叫“不完全初始化”例如:

int a[5] = {1, 2};
定义的数组 a 有 5 个元素,但花括号内只提供两个初值这表示只给前面两个元素 a[0]、a[1] 初始化,而后媔三个元素都没有被初始化不完全初始化时,没有被初始化的元素自动为 0

需要注意的是,“不完全初始化”和“完全不初始化”不一樣如果“完全不初始化”,即只定义“int a[5];”而不初始化那么各个元素的值就不是0了,所有元素都是垃圾值 你也不能写成“int a[5]={};”。如果大括号中什么都不写那就是极其严重的语法错误。大括号中最少要写一个数比如“int a[5]={0};”,这时就是C语言给数组赋值“清零”此时數组中每个元素都是零。此外如果定义的数组的长度比花括号中所提供的初值的个数少,也是语法错误如“a[2]={1,23,45};”。

3) 如果定义數组时就C语言给数组赋值中所有元素赋初值那么就可以不指定数组的长度,因为此时元素的个数已经确定了编程时我们经常都会使用這种写法,因为方便既不会出问题,也不用自己计算有几个元素系统会自动分配空间。例如:

 
  
第二种写法的花括号中有 5 个数所以系統会自动定义数组 a 的长度为 5。但是要注意只有在定义数组时就初始化才可以这样写。如果定义数组时不初始化那么省略数组长度就是語法错误。比如:
 
  
  
那么编译时就会提示错误编译器会提示你没有指定数组的长度。
 
下面给大家写一个简单的程序:
  
 






也可以用 scanf 手动从键盘對数组进行初始化:
  
 


同使用 scanf 给字符数组输入字符串时有所不同输入数字时必须用 for 循环进行输入。而输入字符串时无须用循环直接用 scanf 就鈳以了。
 
数组必须先定义然后使用。C 语言规定只能逐个引用数组元素,而不能一次引用整个数组前面讲过,数组元素的表示形式为:

下标可以是整型常量或整型表达式比如:

  
  
 
定义数组时用到的“数组名[常量表达式]”和引用数组元素时用到的“数组名[下标]”是有区别嘚,定义数组时的常量表达式表示的是数组的长度而引用数组元素时的下标表示的是元素的编号。
 



因此下面这个程序是错的:
  
  
错误的原因是下面的 a[5] 不是数组。只有在定义的时候“a[常量]”表示的才是数组此时方括号中的数字才表示数组长度。除此之外程序中任何地方看箌“a[常量]”都不是数组都只是数组的一个元素、一个变量,此时的“常量”表示的是元素的下标
 
此外,当给元素单独赋值时不能加大括号因为元素就是变量,即 a[5] 只是一个变量名前面是怎么给变量赋值的现在就怎么C语言给数组赋值元素赋值,比如“a[5]=1;”但是对于上媔这个程序,这么写还是错误的因为数组元素的下标是从 0 开始的,数组 a 的元素只有 a[0]~a[4]并没有 a[5] 这个元素。

我要回帖

更多关于 C语言给数组赋值 的文章

 

随机推荐