linuxC语言数组基础知识

Linux小白日记-C语言篇数组

1.一维数组

1.1.一维数组的定义格式为:

类型说明符  数组名[常量表达式];  例如  int a[10]; 

它表示定义了一个整形数组,数组名为a,有10个元素。

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

1.3.常量表达式中可以包括常量和符号常量,但不能包含变量。

注意:

C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。

举个例子:

数组说明中其他常见的错误:

① float a[0];       /* 数组大小为0没有意义 */

② int b(2)(3);   /* 不能使用圆括号 */

③ int k, a[k];   /* 不能用变量说明数组大小*/

1.4.1在定义数组时对数组元素赋以初值。

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

1.4.2可以只给一部分元素赋值。例如:

 int a[10]={0,1,2,3,4};   

定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。

1.4.3如果想使一个数组中全部元素值为0,可以写成:

      int a[10]={0,0,0,0,0,0,0,0,0,0};  

     或int a[10]={0};

      不能写成:int a[10]={0*10};

1.4.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。

1.5数组的地址,a和&a

都是数组的首地址,但是a的步长是一个元素,&a整个数组;

2.二维数组

2.1二维数组定义的一般形式为:

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

例如:int a[2][3]

其实我们可以把一个二维数组看作是两个一维数组的嵌套;

2.2二维数组的初始化

2.2.1.分行给二维数组赋初值。

例如: int a[3][4]={{1,2,3,4},{5,6,7,8}, 

                      {9,10,11,12}};

2.2.2.可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。

例如:

inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

2.2.3可以对部分元素赋初值。

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

2.2.4.如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。

例如:

inta[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};

3.字符数组

3.1字符数组的输入输出可以有两种方法:

逐个字符输入输出。用格式符“%c”输入或输出一个字符。

将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串的输入输出。

例如:

for(i= 0; I < length; i++)

{

       scanf(“%c”, str[i]);

}

charstr[20] = “hello world!”

printf(“%s”,str);

说明:

(1)用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。

(2)如果数组长度大于字符串实际长度,也只输出到遇′\0′结束。strlen函数遇到第一个\0就统计结束。

(3)输出字符不包括结束符′\0′。

(4)如果一个字符数组中包含一个以上′\0′,则遇第一个′\0′时输出就结束。

(5)可以用scanf函数输入一个字符串。

(6)如果利用一个scanf函数输入多个字符串,则在输入时以空格分隔。

例如:scanf(″%s %s %s″,str1,str2,str3);

3.2有关<string.h>的函数:

(1)puts函数

其一般形式为:  puts (字符数组)

其作用是将一个字符串(以′\0′结束的字符序列)输出到终端。

假如已定义str是一个字符数组名,且该数组已被初始化为"China"。则执行puts(str);其结果是在终端上输出China。

用puts函数输出的字符串中可以包含转义字符。

例如:

charstr[]={″China\nBeijing″};

puts(str);

输出结果:

China

Beijing

(2)gets函数

其一般形式为:gets(字符数组)

  其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。

如执行下面的函数:     gets(str)

从键盘输入:

Computer↙将输入的字符串"Computer"送给字符数组str

gets函数在gcc编译时,会报警,但是仍然能执行;

 

(3)strcat函数

其一般形式为:strcat(字符数组1,字符数组2)

Strcat的作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。

例如:

charstr1[30]={″People′s  Republic  of  ″};

charstr2[]={″China″};

print(″%s″,strcat(str1,str2)); 

输出:

People′sRepublic of China 

(4)strcpy函数

其一般形式为:strcpy(字符数组1,字符串2)

strcpy是“字符串复制函数”。

作用:是将字符串2复制到字符数组1中去。例如:

charstr1[10],str2[]={″China″};

strcpy(str1,”china”);

a.字符数组1必须定义得足够大,以便容纳被复制的字符串。字符数组1的长度不应小于字符串2的长度。

b.“字符数组1”必须写成数组名形式(如str1),

“字符串2”可以是字符数组名,也可以是一个字符串常量。如:strcpy(str1,″China″);

c.复制时连同字符串后面的′\0′一起复制到字符数组1中。

d.可以用strncpy函数将字符串2中前面若干个字符复制到字符数组1中去。

例如:strncpy(str1,str2,2);作用是将str2中前面2个字符复制到str1中去,然后再加一个‘\0’。

d.不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如:

   str1=″China″;  不合法

   str1=str2;       不合法

用strcpy函数只能将一个字符串复制到另一个字符数组中去。

用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素

下面是合法的使用:

chara[5],c1,c2;

c1=′A′;  c2=′B′;

a[0]=′C′; a[1]=′h′; a[2]=′i′;

a[3]=′n′; a[4]=′a′;

(5)strcmp函数

其一般形式为:strcmp(字符串1,字符串2)

strcmp的作用是比较字符串1和字符串2。

例如:strcmp(str1,str2);

      strcmp(″China″,″Korea″);

      strcmp(str1,″Beijing″);

比较的结果由函数值带回

a.如果字符串1=字符串2,函数值为0。

b.如果字符串1>字符串2,函数值为一正整数。

c.如果字符串1<字符串2,函数值为一负整数。

(6)strlen函数

其一般形式为:       strlen (字符数组)

strlen是测试字符串长度的函数。函数的值为字符串中的实际长度(不包括′\0′在内)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值