C语言数组

来源:互联网 发布:手机噪音检测软件 编辑:程序博客网 时间:2024/06/05 16:41

在C语言中,数组按如下的方法定义:

 ① 类型 数组名[数组大小];
         int array[10];         char str[15];
  • 1
  • 2
  ② 类型 数组名[]={元素1,元素2,元素3,...};1
         int a={1,2,3,4,5};         char ch[]={'a','b','c'};
  • 1
  • 2
  ③ 类型 数组名[数组大小]={元素1,元素2,元素3,...};2
         float x[4]={1.5, 3.2, 6.0, 23};         int y[5]={1,2,3,4};
  • 1
  • 2

代码块

/*     在下述代码代码片段中展示了几种常见的错误 */#define N 5int main(){        /*错误形式 01: 声明数组时没有确定长度 */    int array1[];        /*错误形式 02:数组长度必须在进行编译初期就能确定,        而不能是在运算处理中才能计算出来的结果,如宏定义 */    int m=5;    int array[m];        /*错误形式 03: 先声明了数组,再赋值*/    int array2[N];    array2={1,2,3,4,5};        /*错误形式 04: 赋值范围超出了开辟的空间*/    int array3[N]={1,2,3,4,5,6};        /*错误形式 05: 试图进行对数组的整体赋值*/

显然,左边的表达式 &(y[0]) 是一个内存中既定的地址,它不可被用于左值!3故是一种错误。

     4.正是由于上述原因,因此如果出现这样的定义方式4:

        int x[5];       //#define N 5       //int x[N]
  • 1
  • 2
  • 3

    则必须对元素分别进行赋值,操作只能通过下标的方式进行5,如:

        int a[5];        for(int i=0;i<5;i++){            a[i]=i;        }
  • 1
  • 2
  • 3
  • 4

     5.数组在进行函数调用时,传递给形参的值为该数组的第一个元素的地址,因此不是值传递,在被调用函数中对数组的处理,都会导致原数组的值被改变,这一点尤其需要注意。

         int array[10];         char str[15];
  • 1
  • 2

     6.数组在进行函数调用时,传递给形参的值为该数组的第一个元素的地址,在进行处理时计算机不知道该连续的数组地址到哪里结束,因此必须同时再传入一个指定的大小参数:len,见上例。

     7.二维数组的使用同一维数组完全类似,只不过每一个一维数组的元素又是一个数组而已;多维数组完全类似,只要细心处理,就不会出现错误。下面给出一个矩阵的计算代码:

int a[N]={1,2,3,4,5},b[N]; b=a; return 0;}
  • 1

    数组原理分析

         1. 数组在定义的时候,在内存空间中为其开辟了一块连续的内存空间,其大小为单个数组元素类型所占大小 sizeof(type) 与元素个数N的积,即:

        2. 同一数组内的数据元素必须一样,即即便如下述定义:

            float  x[]={1, 2, 3, 4.0};
    • 1

    其结果也是使得所有的元素都被强制转换为float类型!

        3. 数组一旦定义之后,数组名就表示数组的第一个元素的地址,即:

            x==&(x[0]);
    • 1

    因此,如果试图按照这样的方式进行赋值:

            int x[]={1,2,3,4,5,6},y[6];        y=x;
    • 1
    • 2

    就会报错,因为这一句话相当于:

            &(y[0])=&(x[0]);
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
0 0
原创粉丝点击