C语言学习笔记
所有运行结果均在编译器VS2022,Debug,x86的环境下得出
一、一维数组
1.基本概念
- 数组是⼀组相同类型元素的集合
- 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。
- 数组中存放的多个数据,类型是相同的
- 下标:C语⾔规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是n-1
- 可以把数组理解成为是数学中的集合
2.语法
- 基本语法如下:
type arr_name[常量值];
- type 指定的是数组中存放数据的类型,可以是: char、short、int、float 等,也可以⾃
定义的类型 - arr_name 指的是数组名的名字,这个名字根据实际情况,起的有意义就⾏。
- [ ]中的常量值是⽤来指定数组的⼤⼩的,这个数组的⼤⼩是根据实际的需求指定就⾏。
3.创建和初始化
3.1创建
比如:
- int math[20];
- char ch[8];
- double score[10];
3.2初始化
3.2.1文字说明
一般使用大括号,把数据放在大括号中,并且可以根据实际需要来进行初始化。
- //完全初始化
- int arr[5] = {1,2,3,4,5};
- //不完全初始化
- int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0
- //错误的初始化 - 初始化项太多
- int arr3[3] = {1, 2, 3, 4};
3.2.2代码示例
#include <stdio.h>
int main()
{
int data[10] = {1,2,3,4,5,6,7,8,9,10};//完全初始化
int data2[10] = { 1,2,3,4,5 };//不完全初始化,剩余的元素默认初始化为0
//int data3[3] = { 1,2,3,4 };//err
int data4[5] = { 1,2,3,4,5 };
int data5[] = { 1,2,3,4,5 };//数组如果初始化了,也可以省略掉数组的小制定,编译器会根据数组的初始化内容
//来确定数组的真实大小
return 0;
}
4.使用示例
4.1数组的打印
只要我们产⽣数组所有元素的下标就可以了,那我们使⽤for循环产⽣0~9的下标,接下来使⽤下标访
问就⾏了。
#include <stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//对应的下标 0 1 2 3 4 5 6 7 8 9
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
printf("%d\n", arr[6]);
printf("%d\n", arr[9]);
return 0;
}
4.2数组元素的输入输出
我们也根据需求,⾃⼰给数组输⼊想要的数据
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
//想输入10个数
int i = 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
//输出数组的元素
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
5.用sizeof计算数组元素个数
- sizeof :C语⾔是⼀个关键字,是可以计算类型或者变量⼤⼩的,其实 sizeof 也可以计算数组的
⼤⼩
- 我们⼜知道数组中所有元素的类型都是相同的,那只要计算出⼀个元素所占字节的个数,数组的元素
个数就能算出来。这⾥我们可以选择第⼀个元素算⼤⼩就可以。 - 接下来就能计算出数组的元素个数
- 代码ruxia:
#include <stdio.h>
int main()
{
int a = 10;
//sizeof 计算的是变量或者类型的长度,单位是字节
//计算变量的长度
printf("%zd\n", sizeof(a));//4
//计算类型的长度
printf("%zd\n", sizeof(int));//4
//计算数组元素的长度
int arr[5] = { 0 };
printf("%zd\n", sizeof(arr));//20 - 计算的是数组的总大小,单位是字节
printf("%zd\n", sizeof(arr[0]));//4
printf("%zd\n", sizeof(arr) / sizeof(arr[0]) );//5
return 0;
}
6.数组在内存中的存放
- 数组在内存中是连续存放的
- %p用来打印地址
- 代码示例如下:
#include <stdio.h>
int main()
{
int arr[8] = { 0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
printf("&arr[%d] = %p\n", i, &arr[i]);//& - 取地址操作符
}
return 0;
}
二、二维数组
1.概念及说明
- 如果我们把⼀维数组做为数组的元素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称为多维数组
- 语法
- type arr_name[常量值1][常量值2];
常量值1表行,常量值2表列
- 下标:C语⾔规定,⼆维数组的⾏是从0开始的,列也是从0开始的
- ⼆维数组中的每个元素都是连续存放
2.初始化
- 不能省略常量值2,但可以省略常量值1
- 其余初始化方式同一维数组基本一致
不完全初始化
int arr[3][5] = {1,2,3,4,5,6,7};
//依次初始化每一行,当不够的时候,剩余的元素初始化为0
int arr2[3][5] = { 0 };
//完全初始化
int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
//不完全初始化
int arr[3][5] = { {1,2},{3,4},{5} };
//二维数组如果初始化,行是可以省略的,但是列不能省略
int arr[][5] = {1,2,3,4,5,6,7};
3.代码示例
- 二维数组的输入输出
#include <stdio.h>
int main()
{
int arr[3][5] = { 0 };
//输入数据
int i = 0;//控制行
for (i = 0; i < 3; i++)
{
int j = 0;
//控制的是列
for (j = 0; j < 5; j++)
{
scanf("%d", &arr[i][j]);
printf("%d ", arr[i][j]);
}
}
//输出数组的所有元素
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 5; j++)
{
}
printf("\n");
}
return 0;
}