C语言第六章:数组

本文详细讲解了一维数组的定义、初始化,以及二维数组的定义、两种初始化方法。特别介绍了C语言中的字符串存储技巧,包括字符数组、字符串常量和函数如strcat、strcpy、strcmp和strlen的使用。
摘要由CSDN通过智能技术生成

第六章:数组

一、一维数组

特点:同一数组中的所有元素都属于同一种数据类型(int char float)数组元素用数组名和相应的下标来确定

1.一维数组的定义

格式:类型名 数组名[常量/常量表达式];

  • float s[25];float s[5*5];

  • 表达式不能含有变量,表达式的值必须要大于零且为正整数

  • 此为错误定义:int N=9; int a[N];

  • 此为正确:#define N 10 int a[N];

  • 使用时可以是常量或者表达式,如:a[i] = 2;

2.一维数组的初始化

格式:类型名 数组名[常量表达式]={初值1,初值2,…};

  • 定义一维数组时可以将各元素的初始值依次放在一对{}中赋给数组(必须用{}将初值括起,且初值之间用一个逗号分隔)

  • int a[5]={19,45,66,90,100,80};

  • {}内:多则出错;少则补0

  • 定义赋初值的个数等于数组长度,则数组长度可以省略,如:int a[ ]={2,3,4,5,6};

  • 只能在定义数组的同时用{}给数组元素整体赋值

二、二维数组

1.二维数组的定义

格式:类型名 数组名 [常量表达式1][常量表达式2];

  • 第一个方括号常量表示行数,第二个方括号常量表示列数

  • {}内:多则出错;少则补0

  • 表达式不能含有变量,表达式的值必须要大于零且为正整数

2.二维数组的初始化

  1. 方法1:将初值依序放在一对{}中,与一维数组初始化格式相同

    • 例如:int a[2][3]={1,2,3,4,5};int a[2][3]={1,2,3,4,5,6};
  2. 方法2:定义二维数组同时,按行初始化每一行初值均用一对{}括起,采用嵌套的{}格式

    • 例如:int a[2][3]={ {1,2,3} , {4,5}};int a[2][3]={ {1,2,3},{3,4,5}};int a[2][3]={0};

初始化可以省略行数,但列数不能省略

错误案例:int a[][3];(没有初始化)、int a[2][]={1,2,3,4,5,6};

正确案例:int a[][3]={1,2,3,4,5,6};

三、字符串

C语言中没有字符串变量,那么如何存储?

  1. 方法1:字符数组来存放

  2. 方法2:字符型指针变量

1.字符数组的初始化

char s[]={‘a’,’b’,’c’,’d’,’e’};

与其它类型数组的初始化方式一样,只是其初 始值是字符

2.字符串

因为字符串最后都有一个字符串结束符(’\0’),所以用字符数组来存放字符串时一定要有一个 元素存放结束符’\0’

  • 字符串常量后有一个’\0’。如:“abcd” 由5个字符组成,“” 等价于”\0”,是一个空字符串

  • 用字符串给一字符数组进行初始化有三种情况

    • 方法1:char a[]={”abcd”};

    • 方法2:char a[]=”abcd”;

      因为有双引号做分隔符了,因此外边的花括号可以省略

    • 方法3:char a[]={‘a’,’b’,’c’,’d’,’\0’}

    • 方法1,2,3长度都为5

3.字符串使用

1.字符串存储(赋值)四种方法
  1. 方法1:scanf( );键盘输入

例:char a[10]; scanf(“%s”,a); 合法

scanf(“%s”,&a); 非法

用%s格式输入时,遇到空格符或回车符则自动结束输入

例:scanf(“%s,%s”,a,b); 不能正确读取数据

scanf中多个%s时不能中间加逗号,要连续写%s%s

方法1:printf( );输出

例:char s[10];
        scanf(“%s”,s); 输入:ab cd<回车>
        printf(“%s”,s); 输出:ab

输入ab后加空格,空格会被认为是’\0’从而终止输入,输入回车亦如此

  1. 方法2:gets( )键盘输入

格式:#include<stido.h>
            gets(字符数组)

例:char str1[10]; gets(str1);puts(str1);
        输入:ab cd<回车>
        输出:ab cd

使用该函数输入字符时,只有遇到回车符系统才结束读取字符,空格不会结束

不论是用%s还是gets()在输入时均不需要输入双引号,若输入时用了双引号则双引号也作为字符串的有效字符

方法2:puts( )输出

格式:#include <stdio.h>
            puts(字符数组/字符串常量)

例:puts(“abc”);puts(“defg”);
输出结果: abc

defg

该函数将 ’\0’转成’\n’输出,每次输出光标会在下一行开始

2.字符串函数
  1. 第1个函数:strcat()

    • 格式: #include<string.h> strcat(字符数组1,字符数组2/字符串)

    • 功能:“连接”

    • 从字符数组1的’\0’开始链接,数组2的’\0’也链接进去

    • 函数返回数组1的首地址

    • 字符数组1必须足够大

  2. 第2个函数: strcpy()

    • 格式: #include<string.h> strcpy(字符数组1/字符串,字符数组2/字符串)

    • 功能:将字符数组2中的字符串替换到字符数组1中。函数值为字符数组1的首地址

  3. 第3个函数: strcmp()

    • 格式: #include<string.h> strcmp(字符数组1/字符串,字符数组2/字符串)

    • 功能:函数返回值相同位置不同字符的ASCII码差值

      strcmp( strcmp( abc “ ” ”, abc );=>0 
      strcmp(“abc”,”abfc”);=>-3
      strcmp(“abc”,”ab”);=>99
      

      不能用关系运算符直接进行字符串大小或字符数组大小的比较
      “abc”==”abc”
      “abc”>”ab”

  4. 第4个函数: strlen( )

    • 格式: #include<string.h> strlen(字符数组)

    • 功能:求出字符数组的实际长度(不包括结束符)

      ch [10]4332567” har a[10]=4332567;
      printf(%d”,strlen(a)); //len=7
      char a[]=”abc\018\0;
      printf(%d”,strlen(a)); //len=5
      // '/'后面会结合八进制,然后算一个
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值