几种类型数组所占字节数以及关键字sizeof和字符处理函数strlen的简单区别

  我们先来简单介绍一下数组;数组分为一维数组,二维数组以及多维数组。我们着重看一下一维和二维数组;

一,1, 数组的格式

 

数组类型  数组名 [常量表达式]

#define Maxlen  100

int   str[Maxlen],nt str1[10];

2,数组的初始化方式

int  a[10]={1,2,3,4,5,6,7,8,9,10};

int  a[]={1,2,3,4,5];,int a[5]={1,2,3];后面自动补零 a[3]=0,a[4]=0。

字符数组的初始化

char  str[20]="hello world!"别后面还有一个结束标志‘\'。注意越界访问

char  str[20]={"hello world!"}

char  str[]="hello world"

char  str[]={'h','e','l','l','o','\0'}

3,二维数组

int a[i][j];  i表示行,j表示列。

二维数组的初始化

维数组与一维数组一样,可以对二维数组的元素进行赋值或者初始化。二维数组初始化的方法如下:

 

   ⑴分行给二维数组赋初值。

   int a[2][3]={{1,2,3},{5,6,7}}; 第一个内花括号的值赋给数组的第一行,第二个内花括号的值赋给数组的第二行。

 

   ⑵所有数据写在一个花括弧内,按顺序赋初值。

   int a[2][3]={2,3,5,6,7,8};它将第一组3个数赋给数组的第一行,第二组3个数赋给数组的第二行。该方法相对简单,但是,当数组元素较多时,容易出现混乱、遗漏、出错。在行、列数较多时,使用第一种方法较好。

 

u ⑶对于定义的静态存储(关键字为static)数组,如果没有赋初值,则系统自动将全部元素赋以0值或\0值。

u

u   如:static int a[2][2];

     相当于static int a[2][2]={0,0,0,0}

u

u   而对定义的int a[2][2];如果不对其赋初值,则数组中各元素的值是不确定的。

    ⑷对部分元素赋初值

    数组在对部分元素赋初值时,如果后面的数组元素不赋初值,系统会对所有数组元素自动赋以0值。

    如:int a[2][3]={{0,2},{1}};

相当于:int a[2][3]={{0,2,0},{1,0,0}};

  再如:static int d[2][3]={{8,5},{9}};

相当于:static int d[2][3]={{8,5,0},{9,0,0}};

  又如:int b[2][3]={1,0,3};相当于:

        int b[2][3]={1,0,3,0,0,0};

 

   ⑸如果对全部元素都赋初值时,则定义数组时,第一维(行)的长度可以不指定,但第二维(列)的长度不能省需要指定。

    如:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}

等价于:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12

⑹键盘输入赋值

   通过键盘输入二维数组的数组元素,一般需要使用二重循环的形式进行。可以先行输入,也可先列输入。

 

   ①先行输入方式

     int a[3][4];                            

     for(i=0;i<2;i++)

        for(j=0;j<3;j++)

           scanf(%d,&a[i][j]);

先列输入方式

     int a[3][4];

     for(j=0;i<3;j++)

        for(i=0;i<2;i++)

           scanf(%d,&a[i][j]);

 

说明:不管是先行输入,还是先列输入,在计算机存储中数组元素仍然是按行存储的。

   ⑺通过赋值语句赋初值

  如:int a[2][2]; a[0][0]=1; a[0][1]=2; a[1][0]=3; a[1][1]=4;

 

   ⑻在定义数组时也可以只对部分元素赋值,而省略第一维的长度,但应使用分行赋值方式。

   如: int a[][4]={{1},{3,1},{0,0,9}};

   它与 int a[3][4]={{1},{3,1},{0,0,9}}; 等价。

 

注:错误的初始化定义:

    int a[3][3]; a={1,2,3,4,5,6,7,8,9}; 这是错误的。

    而int a[3][3]; a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; 也是错误的赋值方式。

二,sizeof和strlen的区别

sizeof为字节统计,strlen是字符长度统计函数

我们都知道;在32位平台上,一个整形数组里面每一个单元所占字节数为4,unsigned short int里面为2,指针数组里面的每一个单元所占字节数也为4,字符型数组里面每一个单元所占字节则为1,对于实型 float为8,double和Long double则为8。

int a[5]={1,2,3,4,5}

sizeof(a)=4*5=20

char str[10]={"hello"}

sizeof(str)=10,strlen(str)=5

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(几种类型数组所占字节数以及关键字sizeof和字符处理函数strlen的简单区别)