提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
一个学习C语言的小白,有问题评论或私信~
本文主要记录C语言的数组~
提示:以下是本篇文章正文内容,下面案例可供参考
1 一维数组
构造数据类型之一
数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组的元素
数组中各元素的数据类型要求相同,用数组名和下标确定,数组可以是一维的,也可
以是多维的。
1.1 一维数组的定义
-
所谓一维数组是指只有一个下标的数组,它在计算机的内存中是连续存储的。
-
C语言中,一维数组的说明一般形式如下:
<存储类型> <数据类型 > <数组名>[<表达式>];
例如:int a[6]:
数组名表示内存首地址,是地址常量。sizeof(数组名)是数组占用的总内存空间 编译时分配连续的内存,内存字节数=数组维数*sizeof(元素数据类型)
注意事项:
C语言对数组不作越界检查,使用时候要注意
关于用变量定义数组维数
int i = 15;
int a[i];
1.2 一维数组的引用
数组必须先定义,再使用
只能逐个引用数组元素,不能一次引用整个数组
数组元素表示形式: 数组名[下标]
例如:
其中,下标可以是常量或者 整形表达式
int a[10];
printf("%d",a); //错误写法
for(i=0;i<10;i++)
printf("%d",a[i]); //正确写法
1.3 一维数组的初始化
- 初始化方式:在定义数组的时候,为数组元素赋初值
int a[5] = {1,2,3,4,5}; - 说明
- 数组不初始化,其元素值为随机数
- 对static数组元素不赋初值,系统会自动赋以0
- 只给部分数组元素赋初值
题目:冒泡排序
它重复的走访过要排序的数列,一次比较两个元素,如果顺序错误就交换。走访数列的工作是重复的进行直到没有再需要交换,也就是说数列已经排序完成。
代码:
#include<stdio.h>
int main()
{
int arr[] = {7,8,9,11,89,6,4,3},t;
int n = sizeof(arr)/sizeof(int);
for(int i = 0 ; i < n-1 ; i++)//拿一个数和另一个数比较最后一个数不用和后一个数比较n-1否则索引会越界
{
for(int j = 0 ; j < n-1-i ; j++)//每循环一遍就确定一个最大值就不用和当前最大值再比了
{
if(arr[j] > arr[j+1])
{
t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
}
for(int i = 0 ; i<n ; i++)
{
printf("%d ",arr[i]);
}
return 0;
}
2 二维数组
2.1 二维数组的定义
定义方式:(声明时列数不能省略,行数可以)
数据类型 数组名[常量表达式][常量表达式];
例如:
int a[3][4];
float b[2][5];
int c [2][3][4];
元素个数 = 行数*列数
2.2 二维数组的存放顺序
原因:内存是一维的
二维数组:按行序优先
二维数组a是由 三个元素组成 a[0]、a[1]、a[2]
每个元素a[i] 由包含2个元素的一维数组组成
3 多维数组
具有两个或者两个以上下标的数组称为多维数组。
int c[2][3][4]
c[0][0][0]、c[0][0][1]、c[0][0][2]、c[0][0][3]
c[0][1][0]、c[0][1][1]、c[0][1][2]、c[0][1][3]
c[0][2][0]、c[0][2][1]、c[0][2][2]、c[0][2][3]
c[1][0][0]、c[1][0][1]、c[1][0][2]、c[1][0][3]
c[1][1][0]、c[1][1][1]、c[1][1][2]、c[1][1][3]
总结
1.所谓一维数组是指只有一个下标的数组,它在计算机的内存中是连续存储的。
2.一维数组初始化了下标可以省略,二维数组的行数可以省略,列数不可以省略。
3.二维数组的内存是一一维的,也是连续的。
4.数组如果没有初始化里面的值是随机的,如果初始化了一部分,后面的数都为0。