昨日回顾
运算符优先级
括号成员第一,全体单目第二,乘除余三,加减四,
位移五,关系六,等与不等排第七,
位与异或位或八九十,逻辑或与十二十一,
条件(?:)高于赋值,逗号运算最低!
C语言的三大结构
顺序结构、分支结构(if...else,switch...case)、循环结构while()、do{}while()、for(;;)。
分支结构:
if...else 配对问题,else总是与离他最近的if配对,if可以没有else。
循环结构:
(1)for(表达式1;表达式2;表达式3) //一般循环不超过10层。
执行顺序:
(A)表达式1
(B)表达式2,若表达式2成立,则(C);不成立,则(E)
(C)执行循环体即{}里的内容;
(D)表达式3,回到下一轮(B)
(E)结束循环
今日内容
一、数组
(1)数组定义
DataType ArrayName[size];
DataType: 数据类型,int,char,float,double等等。
ArrayName: 数组名。
size: 数组的大小或数组下标,必须时常量表达式。
[]: 下标运算符。
下标是从0开始到number-1。
例
int arr[5];
arr 数组名
5 数组大小即数组元素的个数
int 数组元素的类型
(2)数组的初始化
int arr[3] = {1,2,3};
int arr1[3] = {1,3};
int arr2[3] = {1};
int arr3[3] = {[2]=3}; //给具体位置数据赋值,不建议使用!!
int arr4[] = {1,2,3,4} //不建议!
Xint arr5[] = {} //Error!
例
int num1 = 0; //OK
int num2; //OK
int arr[5];
arr[5] = {1,2,3,4,5} //Error!此行的arr[5]视为一个变量
int arr5[] //数组若要初始化,必须在定义的同时初始化!!不要先定义后初始化!!
以下方法不可以!!编译器报错!!
a.int n = 6;
b.int arr[n];
c.int m;
scanf("%d",&m);
int buf[m]={1,2,3};
宏定义:
#define M 5 //通篇,用5去替换M。格式可以是表达式,函数,数字等等
//被替换的通常为大写
(3)数组元素的访问
arr[0],arr[1]...
使用下标形式;
如
int arr[3];
arr [2] 访问第二个元素。
arr [4] 访问第五个元素。
遍历数组元素,逐个访问
(4)数组的存储
数组也是一种数据结构,数组中的元素顺序存储;
数组中每个元素的类型都相同;
(5)数组地址问题
int arr[5];
arr: 0x00000 //数组名,整个数组起始地址,也代表首个数组元素的地址
&arr: 0x00000 //整个数组地址,数组首地址
&arr[0]: 0x00000 //首元素地址
arr+1: 0x00004 //第二元素地址 即&(arr+1)
&arr[0]+1:0x00004 //第二元素地址和上面一致,偏移一个元素大小
地址偏移sizeof(arr[0])个字节
&arr+1: 0x00014 //整个数组地址末尾,即下个数据起首,
偏移的量为sizeof(arr)个字节,偏移一个整数组大小
(6)数组元素的赋值
(7)
char arr[16]={'h','e','l','l','o'}; //存储hello
char buf[16]={"hello"}; //大括号可以不要,
存储hello\0
数组不能越界访问!!
(8)数组名不能和变量名重复!!!
(9)清空数组元素
方法一:
for(i=0;i<n;i++)
a[i]=0;```
>方法二:
```c
<stdlib.h>
<string.h>
memset(a, 0, sizeof(a))```
#二、二维数组(基于矩阵)
例
11 12 13
21 22 23
31 32 33
格式
DataType ArrayName[行下标][列下标];
DataType ArrayName[][列下标]; //行下标可以省
####(1)初始化:
int arr[3][3] = {1,2,3};
int arr1[3][3] = {{11,12,13},{21,22,23},{31,32,33}};//相当于3个一维数组
存储也是顺序按行存储
int arr2[][3] = {11,12,13,21,22};
**注释:**
(1)//.....: 单行注释,可独占一行,也可跟执行语句之后,
但//后的内容不被编译执行,一般放在所需注释行之上或之后。
(2)/*.........*/: 成对出现注释大段代码即注释代码块。
(3)#if 0 // 0 改为 1 就可执行至else间的语句。
#else
...
#endif //多用于测试代码
复制笔记然后排版用时约30min。
问题上课已问,已解决。