前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言程序设计核心详解 第六章 数组_一维数组_二维数组_字符数组详解

C语言程序设计核心详解 第六章 数组_一维数组_二维数组_字符数组详解

原创
作者头像
小徐在进步
发布2024-10-02 21:13:57
2240
发布2024-10-02 21:13:57
举报
文章被收录于专栏:c语言程序设计

第六章 数组

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

方法:一个数组元素其实就是一个变量(可以称为带下标的变量)

1.一维数组

类型名 数组名常量表达式

如:float s25;

1.1 定义数组

定义数组有4个注意:

  1. 数组名属于用户定义标识符。要遵守标识符命名规则简言之,不用能关键字啥的命名
  2. 定义一维数组时数组名后必须用一个方括号[]将常量表达式括起来,常量表达式的值表示所定义数组共有多少个元素(数组长度或数组的大小)如下面是非法的定义,int a{10}; int a(10); 正确定义:int a10;
  3. 定义数组时方括号中的表达式不能含有==变量==。另外表达式的值必须大于零且为正整数。下面是非法定义:int ax;x是变量 int a1.5; int a-10;
  4. C语言每个数组中分配空间时是连续分配的

1.2 一维数组的引用格式

数组名下标

注:C语言中不能对数组进行整体引用只能单独饮用其中的元素。引用时下标可以是表达式。

char a10;

a0='A';

a3+7='b';

记住:数组元素的下标值在(0~N-1之间)

1.3 一维数组的初始化

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

注意:

  1. 定义一位数组时,可以将各元素的初始值依次放在一对{}中给数组,且初值之间用一个逗号分隔int a5={19,45,66,90,100,80};
  2. 多则出错,少则补0
  3. 定义赋初值的个数等于数组长度,则数组长度可以省略int a[]={19,45,66,90,100,80};
  4. 一个也不给则是随机值
  5. 只能在定义数组的同时用{}|给数组元素整体赋值

2. 二维数组

2.1 二维数组的定义格式

类型名 数组名 常量表达式1

如:

int a10;

char b3;

float s7;

注:

  1. 数组名要遵守用户自定义标识符的命名规则
  2. 定义二维数组第一个方括号常量表示行数,第二个方括号常量表示列数.如: int a4*5; iint a4;
  3. 定义数组时,方括号不能含有变量,且表达式的值必须是大于0的正整数 如: int i=3; int ai; 不合法
  4. 在内存中二维数组元素的存放连续存放的,遵循着先行后列原则

2.2 二维数组的引用格式

数组名 行下标

注:

  1. 不能整体引用,只能引用其中的元素
  2. 引用二维数组元素时,必须有行下标和列下标两个下标.从0开始依次加1.

2.3 二维数组的初始化

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

例如:int a2={1,2,3,4,5,6};

方法2:定义二维数组同时,按行初始化每一行初值均用一对{}括起,采用嵌套的{}格式.

例如:int a2={{1,2,3},{4,5,6}};

注意:定义二维数组的同时给数组初始化,则可以省略行数,但列数不能省略.

例如:

int a={1,2,3,4,5,6} 没问题

int a2={1,2,3,4,5,6} 非法

int a; 非法,必须得有数据

3.字符数组

引子:c语言中没有字符串变量,那么如何存储字符串?

方法1:字符数组来存放

方法2:字符型指针变量

3.1 字符数组的初始化

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

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

字符串:

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

  1. 字符串常量后有一个'\0'如:"abcd"由5个字符组成 "" 等价于"\0",是一个空字符串
  2. 用字符串给一字符数组进行初始化有三种情况方法一:char a[]="abcd"; 字符数组长度为5 与char a[]={'a','b','c','d'}对比,不相同 字符数组长度为4 方法二:char a[]={"abcd"}; 字符数组长度为5,双引号可以省略花括号 方法三:char a[]={'a','b','c','d','\0'};字符数组长度为5

4.字符串的使用

4.1 字符串存储(赋值)四种方法

方法1:

scanf();键盘输入

char a10; scanf("%s",a); 合法 scanf("%s",&a); 非法

数组头就是数组的首地址,不用加上取地址符

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

printf();键盘输出

注意:输出时则从当前地址开始直到遇到结束符'\0'为止

方法2:

gets()键盘输入

格式:

#include<stdio.h>

gets(字符数组)

功能:读取一个字符串赋给字符数组

注:

(1)用该函数输入字符时,只有遇到==回车符==系统才结束读取

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

puts( )输出

格式:

#include<stdio.h>

puts(字符数组或字符串常量)

功能:在屏幕上输出字符数组中的字符.

注:用该函数输出与用%s格式输出一样,只是将=='\0'转成'\n'输出==

方法3:

字符串初始化

char s[]=''abcd'';

char s[]={"abcd"};

char s[]={'a','b','c','d','\0'};

方法4:

字符串函数

4.2 字符串函数

格式:#include<string.h>

4.2.1 strcat()

strcat(字符数组1,字符数组2);

将字符数组1后连接字符数组2,字符数组2不发生变化

功能:"连接"

例如:

代码语言:c
复制
char a[18]="jack";
char b[18]="zhy";
strcat(a,b);
a是jackzhy,b是zhy

4.2.2 strcpy()

格式:

#include<string.h>

strcpy(字符数组1,字符数组2)

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

会直接把字符数组2包括\0,覆盖到字符数组1上

4.2.3 strcmp()

strcmp(字符数组1,字符数组2)

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

从左往右,一个字符一个字符比较

strcmp("abc","abc") 差值是0

strcmp("abc","abfc") 差值是-3

strcmp("abc","ab") 差值是99

注意:不能用关系运算符比较字符串

4.2.4 strlen()

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

注意:\0是结束符,但是\1可不是,\后面可以接一个8进制数

char a[]="abc\018\0" strlen()=5, \01是一个 8肯定不是8进制

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第六章 数组
    • 1.一维数组
      • 1.1 定义数组
      • 1.2 一维数组的引用格式
      • 1.3 一维数组的初始化
    • 2. 二维数组
      • 2.1 二维数组的定义格式
      • 2.2 二维数组的引用格式
      • 2.3 二维数组的初始化
    • 3.字符数组
      • 3.1 字符数组的初始化
    • 4.字符串的使用
      • 4.1 字符串存储(赋值)四种方法
        • 4.2 字符串函数
          • 4.2.1 strcat()
          • 4.2.2 strcpy()
          • 4.2.3 strcmp()
          • 4.2.4 strlen()
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档