到目前为止我们已经学习了C语言的基本数据结构,整型,浮点型,字符型
复合数据类型,是由简单的数据类型,经过一次的数据结构封装,组成的新的数据类型,比如数据,结构体(公共体)
1.为什么需要数组
数组是就是一个数组成的组,数是一个特定的数据类型,数组是好多的数放在一起
注:数组的数据类型是单一的
![](https://img.haomeiwen.com/i12533422/4eb3b624bdf404a6.png)
eg:
#include <stdio.h>
int main(void){
int a[4];//定义一个数组
a[0]=23;//用a[0],a[1].....以此来访问数组的元素
a[1]=24;
a[2]=43;
//a[3]=55;
for(int i=0;i<4;i++){
printf("a[%d] = %d \n",i,a[i]);
}
}
2.如何定义数组
数据类型 数组名 [ 数组长度];
int a[4];
数组的数据类型是单一的,不可能一个数据组存在两种数据类型
3.如何使用数组
数组定义的时候作为整体定义,但是使用的时候需要拆开使用数组的元素,比如数组int a[4];,使用其中四个元素,分别用a[0]....a[3],其[]是数据标志,[ ]中的数字叫做数组下标(也叫index索引),下标0表示数组的第一个元素,下标1表示数组中第二个元素,以此类推,最后一个为n-1,如果下标超过n-1,会产生越界访问,结果是不可预期的
4.数据初始化
初始化(initilize,简写为init),是为了让对象有一个预定的初始化状态
4.1.变量初始化
当一个局部变量定义时没有初始化,它的值是随机的,如果没有注意会导致程序的错误,如何解决这个问题
4.1.1 int a; a=23; //用‘=’运算符给变量赋值
4.1.2. int a=23; //直接给初始化的值
注:如果变量不知道赋值什么值,可以让初始化的值为0;
4.2.数组初始化
#include <stdio.h>
int main(void){
//int a[3] ={121,28829,202002};//完全初始化
//int a[3] ={121,28829};//不完全初始化
//int a[3] ={121, ,202002};//这样定义会报错
//int a[3] ={};//不完全初始化
//a[1]=333;//
//不完全初始化的值,没有命名的值,会用0填充
int a[8] = { a[5] = 32223};//gcc特有的初始化。,可以编译但是,会出错,这样赋值会把第数组的值赋值上,以及第n+1个数赋值上s
for(int i=0;i<9;i++){
printf("a[%d] = %d \n",i,a[i]);//如果访问的元素超过数组的边界,会给一个随机数
}
}
4.2.1.完成初始化,依次赋值
4.2.2.不完全初始化,初始化的从a[0]开始依次向后赋值,不足的默认用0赋值
5.不同类型的数组
eg:
#include <stdio.h>
int main(void){
int a[5];//整型数组
char aChar[5]; //字符型数组
float aFloat[5]; //浮点型数组
double aDouble[5];//双精度数组
}
程序在运行中,需要一定的资源,这些资源包括cpu,内存条,这些资源一般由运行环境(一般指操作系统),比如我们在linux系统上,./a.out 运行时,linux系统为我们提供了运算能力和内存,程序越庞大,运行时消耗的内存就越多,占用内存的其中之一,就是我们程序中定义的变量,C语言程序中,变量的实质就是我们内存中的一个格子,这个格子就是变量名,以后访问这个内存的格子,就使用改变量名就行,这就是变量的本质。
数据类型的实质是内存中不同格子的种类,比如整型格子,双精度格子,浮点型格子,字符型格子
int (4个字节)
float(4个字节)
double(8个字节)
char(1个字节)
字节:1个字节等于8个二进制
sizeof 运算符
返回一个变量或一个数据类型的内存占用长度,以字节计算
6. 字符数组
char a[5];//定义字符数组
1.在c语言引用一个单个字符串时,立刻用单引号 ' ' 括起来比如‘a’。
2.定义数组初始化时,可以省略传统定义的[ ]的长度,c语言编译器自动推出其长度,推论长度根据初始化元素的个数。
3.字符串在C语言引用时,需要用双引号,比如"abcde"
"abcde"实际上有6个字符,第六个字符是“\0”,"\0"是C语言定义字符串时的结尾标志,所以在字符串在初始化时,会在动在字符串结尾的时候加上‘\0’标识
eg:下面的案例打印结果如下图
#include <stdio.h>
int main(void){
char s[] = "abcde";//字符串可以这样定义
//s = "ashhsk";//这样赋值会报错,这是array type,不能这么赋值(assignment to expression with array type
for(int i=0;i<6;i++){
printf("s[%d] = %c,s[%d] = %d \n", i,s[i],i,s[i]);
}
![](https://img.haomeiwen.com/i12533422/7cd08195a27000c2.png)
网友评论