数组与指针

来源:互联网 发布:超高速帆船 知乎 编辑:程序博客网 时间:2024/06/05 22:35
1. 一维数组
  1.一维数组的定义格式为:
     类型说明符  数组名[常量表达式];  例如  int a[10]; 
    它表示定义了一个整形数组,数组名为a,有10个元素。

   2.在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。

   3.常量表达式中可以包括常量和符号常量,但不能包含变量。
注意:C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值
  举例:数组说明中其他常见的错误:
  ① float a[0];      /* 数组大小为0没有意义 */
  ② int b(2)(3);   /* 不能使用圆括号 */
  ③ int k, a[k];   /* 不能用变量说明数组大小*/    

  4.一维数组在内存中的存放
    一维数组: float mark[100];每个数据元素占用的字节数,就是基类型的字节数一个元素占4个字节
 

5.对一维数组赋值
     1.在定义数组时对数组元素赋以初值。
       例如:int a[10]={0,1,2,3,4,5,6,7,8,9};
     2. 可以只给一部分元素赋值。例如:
        int a[10]={0,1,2,3,4};   
        定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。
    3. 如果想使一个数组中全部元素值为0,可以写成:
       int  a[10]={0,0,0,0,0,0,0,0,0,0};  
       或int a[10]={0};
       不能写成:int a[10]={0*10};
   4.在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。
       例如:int a[5]={1,2,3,4,5};
       也可以写成  int a[]={1,2,3,4,5};  
        int a[10]={1,2,3,4,5};  只初始化前5个元素,后5个元素为0。
   5.数组的地址,a和&a

2.二维数组
1.二维数组定义的一般形式为:
  类型说明符  数组名[常量表达式][常量表达式];
  例如:
  定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组。
  如下:float  a[3][4],b[5][10] ;

 注意:我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。
  例如:可以把a看作是一个一维数组,它有3个元素:a[0]、a[1]、a[2],每个元素又是一个包含4      个元素的一维数组。
 

2.对二维数组初始化
   4种方法对二维数组初始化:
  1.分行给二维数组赋初值。
   例如: int a[3][4]={{1,2,3,4},{5,6,7,8}, 
   {9,10,11,12}};

  2.可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。
  例如:
   int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

3.可以对部分元素赋初值。
     例如: int a[3][4]={{1}, {5}, {9}};也可以对各行中的某一元素赋初值,如int a[3][4]={{1}, {0,6}, {0, 0, 0, 11}};

4.如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
    例如:
    int a[3][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};等价于:、int a[ ][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   

思考:
数组a[3][4],哪个不能表示a[1][1]
*(a[1] + 1)   
*(&a[1][1])
(*(a + 1))[1]
*(a + 5)
答案:第4个不能表示。

3.字符数组

1.初始化
  例如:char c[10];
     c[0]=′I′ ;  c[1]=′ ′;   c[2[=′a′;   c[3]=′m′;
     c[4]=′ ′;   c[5]=′h′;  c[6]=′a′;   c[7]=′p′;
     c[8]=′p′;   c[9]=′y′;
    对字符数组初始化,可逐个字符赋给数组中各元素。
    例如:
    char c[10]={‘I’, ‘’,‘a’,‘m’,‘’,‘h’,‘a’,‘p’, ‘p’,‘y’}
 
    注意:为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”——‘\0’

2.字符数组的输出
   字符数组的输入输出可以有两种方法:
   •逐个字符输入输出。用格式符“%c”输入或输出一个字符。
   •将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串的输入输出。

3.说明:
(1)用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。
(2)如果数组长度大于字符串实际长度,也只输出到遇′\0′结束。
(3)输出字符不包括结束符′\0′。
(4)如果一个字符数组中包含一个以上′\0′,则遇第一个′\0′时输出就结束。
(5)可以用scanf函数输入一个字符串。
         如果利用一个scanf函数输入多个字符串,则在输入时以空格分隔。
         例如:scanf(″%s %s %s″,str1,str2,str3);   '\n'有刷新缓冲区的作用。
         输入数据:How are you?
         数组中未被赋值的元素的值自动置′\0′。