C语言学习(四)数组

第七章 数组

7.1一维数组的定义和引用


1.定义方式:类型说明 数组名[常量表达式]

a).例如:intnum[10];表示:定义了一个数组,数组名为num,10个元素。

b).在定义数组时需要指定数组元素的个数,例如num[10],就表示num数组有10个元素。


c).下标从0开始。


d).常量表达式中可以包含常量或者符号常量,但是不能是变量。也就是说,C语言不允许对数组的大小做动态定义。


2.数组必须先定义再使用。C语言规定只能逐个引用数组元素而不能一次引用整个数组。


3.一维数组的初始化可以用以下方式实现:

a)在定义数组时对数组进行元素赋予初指,例如:inta[5] = {1,2,3,4,5};


b)可以只给一部分元素赋值,例如inta[5] -= {1,2,3};后面2个元素值为0


c)如果想要一个数组中的所有元素值为0,可以写成:

inta[5] = {0,0,0,0,0};或者inta[5] = {0};


d)在对数组全部元素赋值时,由于数组的个数已经确定,因此可以不指定数组的长度。例如:

inta[] = {1,2,3,4,5};



7.2二维数组的定义和引用

1.定义方式: 类型说明符 数组名[常量表达式][常量表达式];

例如:floata[3][4];定义a34列的数组。可以把a看作是一个一维数组,它有3个元素:a[0],a[1],a[2],每个元素又是一个包含4个元素的一维数组。



2.C语言中,二维数组中元素排列的顺序是按行存放的,即在内存中先顺序存放第一行的元素,再存放第二行的元素。

a[0][0] a[0]1] a[0][2] a[0]3]

a[1][0] a[1]1] a[1][2] a[1]3]

a[2][0] a[2]1] a[2][2] a[2]3]


3.二维数组的引用形式为:数组名[下标][下标]


4.二维数组的初始化

a).分行给二维数组初始值。例如:

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


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

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


c).可以对部分元素赋值,例如:

inta[3][4] = {{1},{2},{3}};其余元素为0.

d).如果对全部元素都赋初值,则定义数组时,对一维长度可以不指定,但是需要指定第二维长度,例如:

inta[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};系统会根据总个数和第二维的长度酸楚第一维的长度。



7.3字符数组

1.字符数组的定义:charc[3]; c[0] = 'a'; c[1] = 'b'; c[2] = 'c';


2.由于字符数组与整数是互相通用的,因此也可以定义一个整形数组,用它来存放字符数据

例如:intc[5]; c[0] = 'a';这种定义合法,但是浪费存储空间。


3.字符数组的初始化:charc[3] = {'a','b','c'};


4.如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。


5.如果花括号中提供的初值个数大于数组长度,则按语法错误处理。


6.如果初值个数小于数组长度,则只将这写字符给数组中前面那个元素,其余的自动定义位空字符‘\0’.

例如:charc[5] = {'a','b','c'};

则数组状态为:c[0] c[1] c[2] c[3] c[4]

   a      b     c     \0   \0

7.在指定数组长度的时候可以省略。例如:

charc[] = {'a','b','c'};系统会自动根据初值个数确定数组长度。


8.C语言中,处理字符串当作处理字符数组。


9.C语言规定了一个“字符串结束标志”,用字符‘\0’来作为这个标志。如果有一个字符串,前面9个字符都不是空字符(\0,而第10个字符是空字符,则这个字符串的有效字符为9.


10.系统对字符串常量也自动加一个‘\0’作为结束符。例如,”hello”共有5个字符,但是在内存中占6个字节,最后一个字符'\0'是系统自动加上去的。


11.字符串作为一个一维数组存放在内存中。


12.printf(“hello world \n”);系统自动在最后一个字符'\n'后面添加了一个'\0'作为字符串结束标志,在执行prinyf函数时,没输出一个字符检查一次,看下一个字符是否是'\0',如果是则停止输出。


13.用字符串常量来使字符数组初始化,例如:

charc[] = {“hello”};

可以省略花括号,直接写成:

charc[] = “hello”;

注意:c数组的长度是6,而不是5。因为字符串常量后面系统自动加上了一个'\0'


14.为了使处理方法一致,便于测试字符串的实际长度,以及在程序中做相应的处理,在字符数组的末尾也常常人为的加上一个'\0'.例如:

charc[6] = {'h','e','l','l','o','\0'};


15.字符数组的输入输出有两中方法

a).逐个字符输入输出。用格式符”%c”输入输出一个字符.

b).将整个字符串一次输入或者输出。用“%s”格式符。例如:


#include<stdio.h>


voidmain() {

char ch[] = "hello";

printf("%s",ch);

}

注意: 1.输出字符串不包括‘\0’

2.用”%s”格式符输出的时候,printf函数中的输出项是字符数组名,而不是数组元素名。

3.如果一个字符数组中包含一个以上'\0',则遇到第一个'\0'时输出就结束。

4.可以用scanf函数输入一个字符串,但是输入的字符串长度不能大于定义的字符数组的长度。例如:

#include<stdio.h>

voidmain() {

char ch[5];

scanf("%s",ch);

printf("%s\n",ch);

}


输入:12345,输出12345,输入123456,出错。


5.printf(“%s”,ch);实际上是按字符数组名ch找到数组的起始地址,然后逐个输出其中的字符,知道遇到'\0'为止。


16.字符串处理函数


a)puts函数:

puts(字符数组),作用是将一个字符串(以'\0'结束的字符序列)输出到终端。可以用printf()代替。


b)gets函数

gets(字符数组),作用是从终端输入一个字符串到字符数组,得到一个字符数组的起始地址。


c)strcat函数

strcat(字符数组1,字符数组2),作用是将字符串2接到字符串1后面,结果放在字符数组1中,返回字符数组1的地址。

例如:

#include<stdio.h>

voidmain() {

charstr1[30] = {"hello "};

charstr2[] = {"world\n"};

printf("%s",strcat(str1,str2));

}

注意:1)字符数组1必须足够大,能够容纳连接后的新字符串。如果定义str]时,不指定数组长度,那么合并的str2长度不能长于str1否则会出错.例如:


voidmain() {

charstr1[] = {"hello "};

charstr2[] = {"ni world\n"};

printf("%s",strcat(str1,str2));

}

编译通过,运行出错。


d) strcpy函数

strcpy(字符数组1,字符串1),作用是将字符数组2复制到字符数组1中。例如:

charstr1[10] = '', str2[] = {“hello”};

strcpy(str1,str2);

注意: a)字符数组1需要定义的足够大,字符数组1的长度应该大于字符串1的长度

b)字符串2可以是字符数组名,也可以是一个字符串常量,例如:

strcpy(str1,”hello”);

c)如果未对str1数组赋值,则str1各字节内容是未知的,复制时,将str2中的字符串和'\0'复制到字符数组1中,如果str2长度要小于str1,str1后面的字符不一定是'\0',而是str1中原有的字符。

d)不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组,只能用strcpy函数将一个字符串复制到另一个字符数组中。例如:

str1= “hello”;

str2= str1;


estrcmp函数

strcmp(字符串1,字符串2),作用是比较字符串1和字符串2.

比较规则:对两个字符串从左至右逐个字符相比(按ASCII码值大小比较),知道出现不相同的字符或者'\0'为止。如果全部字符都相同,则认为相等,如果出现不同的字符,则以第一个不相同的字符的比较结果为准。例如:“A”< “B” , “a” > “A”等。

比较结果由函数之带回。

1)如果字符串1=字符串2,则函数值为0

2)如果字符串1>字符串2,则函数值为一个正正数;

3)如果字符串1<字符串2,则函数值为一个负整数。


注意,对两个字符串比较不能用以下形式:

if(str1>str2)

printf(“”);


而只能用:

if(strcmp(str1,str2)> 0)

printf(“”);


f) strlen函数

strlen(字符数组),作用是得到字符数组的长度。函数值为字符串中的实际长度(不包含'\0')例如:

charstr[10] = {“hello”};

printf(“%d”,strlen(str));

g)strlwr函数和strupr函数

strlwr(字符串);作用,将字符串中大写字母转换为小写字母。

strupr(字符串);作用,将小写,转换为大写。


文章链接:http://blog.csdn.net/murongshusheng/article/details/8613499

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值