1. 一维数组的创建
1.1 数组的创建
数组是一组相同数据类型元素的集合。
数组的创建方式:
type_t arr_name[const_n];
//type_t:是指数组的元素类型(可以是基本数据类型的任意一种)
//arr_name:数组名(与变量相同,遵循标识符的命名规则)
//const_n:常量表达式(用来表示数组中元素个数,即数组的大小(长度))
注:常量表达式是用[]方括号括起来的,不是()圆括号。
数组创建的实例
代码1:
int arr1[10];//定义一个有10个整形的一维数组 char arr2[5]; float arr3[6]; ...
代码2:
int n=10; int arr[n];//这样可以吗?
注:变长数组(不定长的数组)
数组创建,在C99标准之前,[]中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化。
理解:
①能否用变长数组:先看环境支不支持C99的新特性
如:VS IDE 不支持C99中的变长数组
Linux gcc 支持C99中的变长数组
②注意:变长数组不能初始化
1.2 数组的初始化
数组的初始化是指,在创建数组的同时给数组的内容一些(合理)初始值。
即:创建的同时给数组一些值,这就叫初始化(类似变量)
一维数组初始化的一般形式如下:
1、完全初始化:(元素个数=数组长度)
①指定数组长度:
int arr1[6]={0,1,2,3,4,5};//元素个数=数组长度
②不指定数组长度:(没有指定数组长度,编译会根据初始化的内容来确定数组长度)
int arr2[]={0,1,2,3,4};//数组长度=5
2、不完全初始化:(数组长度!=元素个数)
如:
①int型:剩余没赋初值的元素默认初始化为0
②char型:剩余的元素默认初始化为‘\0’
注:数组元素之间用,逗号隔开。
注意区分以下代码:
代码1:
#include<stdio.h> int main() { char arr1[] = { 'a','b','c'}; char arr2[] = "abc"; printf("%s\n", arr1); printf("%s\n", arr2); return 0; }
运行结果:
%s——打印字符串,直到遇到‘\0’才停止。
每一个字符串末尾隐藏放了个'\0'。
代码2:
#include<stdio.h> int main() { char arr1[4] = { 'a','b','c' }; char arr2[] = { 'a','b','c' }; printf("%s\n", arr1); printf("%s\n", arr1); return 0; }
运行结果:
注:char未初始化的元素默认'\0'
1.3 一维数组的使用
知识点:
1、数组是使用下标来访问的,下标是从0开始的(下标标明了元素在数组中的位置)
2、[]在这是下标访问操作符(所以里面可以是变量)
3、数组的大小可以通过计算得到
如:
int arr[10];
sz=sizeof(arr)/sizeof(arr[0]);
代码实例如下:
#include<stdio.h> int main() { int arr[] = { 0,1,2,3,4,5 }; int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数 //1、顺序打印 int i = 0;//下标 for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } printf("\n"); //逆序打印 for (i = sz - 1; i >= 0; i--) { printf("%d ", arr[i]); } printf("\n"); return 0; }
运行结果:
说明:
数组的使用与变量相似,但也有区别!
1、数组必须先定义,后使用。
2、数组元素只能逐个引用,而不能一次引用整个数组(字符串除外)。
3、 当逐个使用数组中的每一个元素时,通常借助for循环语句。
1.4 一维数组在内存中的存储
探讨数组在内存中的存储:我们打印每个元素的地址看看
#include<stdio.h> int main() { int arr[6] = { 0,1,2,3,4,5 }; //打印每一个元素的地址 int i = 0; for (i = 0; i < 6; i++) { printf("%p\n", &arr[i]);//%p-专门用来打印地址的 } return 0; }
运行结果:
由于数组在内存连续存放,所以我们知道数组的一个地址就可以顺藤摸瓜找到其他元素。
代码如下:
#include<stdio.h> int main() { int arr[6] = { 0,1,2,3,4,5 }; int * p = &arr[0]; int i = 0; for(i=0;i<6;i++) { printf("%d ", *(p+i)); } return 0; }
运行结果:
2. 二维数组的创建和初始化
2.1 二维数组的创建
//二维数组创建
int arr[3][4];//定义一个3行4列的整形数组
char arr1[2][3];
说明:
①二维数组可以看成一个矩阵(先行后列)
②元素个数=行数*列数
③存储一个二维数组所需的内存字节数:
总字节数=sizeof(类型)*行数*列数
2.2 二维数组的初始化
1、按数组的排列顺序对各数组元素赋初值:
int arr1[2][3]={1,2,3,4,5,6};
2、分行给二维数组赋初值(一个花括号{}表示一行)
int arr2[2][3]={{1,2},{4}};
3、注意:二维数组如果初始化,行是可以省略的,但列不能省略!
int arr3[][2]={1,2,3,4,5,6};//元素个数=行数*列数—》行数=3