7.31笔记
【1】数组
**概念:**具有一定顺序的若干变量的集合
定义数组:存储类型 数据类型 数组名[元素的个数]
int arr[5];//定义了一个数组名为arr的数组并且数组中可以存放五个数,开辟了五个int类型的空间存放
int arr[5]={ 1, 2, 3,4,5}; int a=10;
下标: 0,1,2 3 4
数组名:代表数组的首地址,地址常量 ,不可以被重新赋值,不能为左值,不可以进行++ --的操作
数组中的每一项都是变量,称之为元素
数组的更新:
访问元素:数组名[元素的下标] 下标从零开始
arr[0]---->在arr数组中访问第一个元素的值
访问第一个元素arr[0]
访问第n个元素:arr[n-1]
如果一个数组中存放了5个元素,对应下标到5-1的位置
注意数组越界的问题(在访问时和定义时都要注意)
修改元素的内容:数组名[元素的下标]=新值
int a=1; a int arr[3]={1,2,3}—>arr[0] arr[0]就是第一个元素的变量名
特点:
1.定义数组的数据类型和后面要存储的数据类型相同
2.内存是连续的
3.遵循标识符的命名规则
4.数组下标从0开始,n个元素,下标到n-1
5.在同一个函数中,数组名和变量名不可以重名
int a[5];
int a=10;//报错
分类:
一维数组 二维数组
【2】一维数组
1.格式:存储类型 数据类型 数组名[元素的个数]
2.访问元素:数组名[下标],下标从零开始
3.数组名:数组首地址 不能为左值
1.初始化:
1》.全部初始化
int a[3]={1,2,3};
注意数组越界的问题
int a[3]={1,2,3,4}//错误
2》.部分初始化:
int a[3];
a[0]=1;
a[1]=2;
//1,2,随机数
int a[3]={1,2} //1,2,0
3》.未初始化:
int a[3];---->a={1,2,3}//错误
a[0]=1;
a[1]=2;
a[2]=3;
int b;—》b=10;
定义空数组:
1.int a[3]={0,0,0};
2.int a[3]={0};//0,0,0
3.int a[3]={};//0,0,0
引用:
1.先定义后引用
2.每一次引用只能引用一个元素a[i],想要引用多个就只能循环遍历
3.引用时要注意数组越界,有的编译器不会报错
4.打印数组的元素的地址,使用%p格式
5.引用时数组的内存地址是连续,分配情况
数组的遍历
int a[3]={1,2,3};
a[0], a[1], a[2];
for中的循环变量i i=0, i<3, ---->0,1,2
数组的输入输出:
练习:对数组进行求和
int a;int arr[5];
数组的大小
1.元素的个数*数据类型的大小
2.sizeof()
数组的元素的个数:
1.数组的大小/数据类型的大小
2.sizeof(数组名)/sizeof(数据类型)
练习:计算斐波那契数列前15项并逆序输出
1 1 2 3 5 8…
a[i]=a[i-2]+a[i-1]
a[i+2]=a[i]+a[i+1]
【3】清零函数
2.bzero
#include <strings.h>
void bzero(void *s, size_t n);
功能:将内存空间设置为0;
参数:s:需要清空空间的首地址
n:需要清空的空间的字节大小
返回值:无
3.memset
#include <string.h>
void *memset(void *s, int c, size_t n);
功能:将内存空间设置为0;
参数:s:需要清空空间的首地址
n:需要清空的空间的字节大小
c:将空间设置成的值 默认是写0,设置成其他不准确
返回值:清空空间后首地址
【4】字符数组
概念:原来存放若干字符的集合(存放字符串),数据类型是char类型
定义:
char arr[]={“hello”}; //元素的个数就是6,字节数:6 ----->char arr[6]={‘h’,‘e’,‘l’,‘l’,‘o’,‘\0’};//6字节
char b[]=“hello”----->//元素的个数就是6,字节数:6
char c[32]=“hello”----->//实际元素的个数就是6,字节数:32
注意:在定义字符数组时,经常省略元素的个数,需要注意数组越界
字符数组的输入输出
1.for循环,打印格式%c
2.%s格式可以直接输入输出字符串(使用这个格式输入不可以包含空格)
注意:scanf在使用是会将空格和\n都理解成结束
可以使用%[^\n]格式: 直到遇到\n才理解为是结束
4.gets
char *gets(char *s);
功能:从终端输入一个字符串
参数:s:字符数组的首地址
返回值:目标字符串的首地址
注意:使用gets的时候不关心数组越界的问题,使用时会报警告
puts
int puts(const char *s);
功能:向终端输出一个字符串
参数:s:要输出的字符数组的首地址
返回值:输出的字符的个数
练习:
判断对错:
题目:char s[10]={};
1.s[10]=“hello”;//错
2.s=“hello”;// 错
3.strcpy(s,“hello”);//对
练习:将字符串倒置 char s[6]=“hello” ---->olleh