这篇文章能让你理解读懂C语言中的一维数组 二维数组(字符数组)
在写C语言代码的时候,在很多开发场景中数组的使用非常频繁。既然重要,首先得知道数组的定义和用法了。
数组
数组:
当我们在定义数组的时候,要注意数组中这个[]中括号,[]里面的值不能是一个变量,[]只能为常量。
使用数组:
当使用数组时,数组中的[]中括号里面的值可以是常量也可以为变量。数值数组不能整体操作,而且数组的每一个元素都是变量,可以被改变赋值;如果数组只初始化部分元素,其他元素被初始化为0; # 备注:如果定义时,[]中括号里面没有值,这个数组的元素个数由{}大括号里面的元素个数来决定;比如来看下面一段代码演示:
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>void test() { int arr[] = { 1,2,3,4,5 }; int num = 0; while (num < 10) { printf("Num = %d\n", arr[num]); num++; }}int main() { test(); return 0;}
结果图为:
当拿到数组,如何了解数据在内存中的地址?
可以这么解释为数据在内存中的地址,就是它在内存中的起始地址。比如定义一个数组 int arr[5];
如何知道int arr[5]代表着什么意思?
其中arr[0]就代表第0个元素,而前面加上&引用符号 &arr[0] 代表的是第0个元素的地址(也称为首元素地址);arr为数组名,代表数组,也代表第0个元素的地址。
用关系表示:arr == &arr[0];所以说数组名就是一个常量(不能被赋值),也是一个地址。
注意区分:
&arr[0]+1 或&arr[0]+2 代表的是第0个元素的地址加1跨过一个元素,或加2跨过两个元素;
arr+1 或 arr+2 代表的是第0个元素的地址加1跨过一个元素,或加2跨过两个元素;
&arr+1 代表的是整个数组的地址加1跨过整个数组;
二维数组
二维数组:
在定义二维数组时,有个注意的地方:不能省略列的下标,但可以省略行的下标。
比如这个二维数组:int arr[4][5];
注意区分:
arr[0][0]:代表的是第0行的第0个元素;
&arr[0][0]:代表的是第0行的第0个元素的地址;
arr[0]:代表的是第0行一维数组的数组名;
&arr[0]:代表的是第0行的地址;
arr:代表的是二维数组的数组名(代表二维数组),同时也代表首行地址;
&arr: 代表的是二维数组的地址;
关系则表示:
&arr[0][0]+1:代表的是第0行第0个元素地址加1跨过一个元素;
arr[0]+1:代表的是第0行的元素地址加1跨过一个元素;
&arr[0]+1:代表的是第0行的地址加1,跨过一行;
arr+1:代表的是首行地址加1,跨过一行;
&arr+1:代表的是二维数组地址加1,跨过整个数组。
字符数组
字符数组:
首先先了解下什么是数值数组 和 字符数组?
1、数值数组:int arr[5] 每 个元素int类型;
2、字符数组:char arr[5] 每个元素是char类型;
谈到字符数组一般都会想到字符串,它们的区别是:
字符串:字符数组中有\0字符的数组称为字符串,加之,有\0字符的字符数组操作起来也较方便。
字符数组:如果字符数组中含有\0的字符,也是字符串;
接下来用sfgets和fputs进行输入输出用代码方式演示下:
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char number[1024] = ""; // 也可以用scanf方式从键盘获取一个字符串,遇到\n结束; /*scanf("%s", number); printf("%s\n", number);*/ // 输入输出操作 fgets(number, sizeof(number), stdin); number[strlen(number) - 1] = 0; printf("%s\n", number); fputs(number, stdout); printf("\n"); return 0;}