数组的概念
数组是有序的数据集合 属于构造数据类型 要求足足中的每一个数据元素类型相同 维数可划分为1维和多维数组
一维数组
在物理空间分配上 系统在内存中为一维数组分配一段连续的空间
定义 类型说明符 数组名 [常量表达式]
对于数组类型说明要注意一下几点:
1.数组的类型实际上是指数组原属的取值类型。同一个数组的所有元素的数据类型都是相同的。
2.在编写程序时,数组名的书写规则应符合标识符的书写规定。
3.编写程序时,数组名不能与其他变量名相同。
4.方括号中常量的表达式表示数组元素的个数。
5.不能再方括号中用遍了来表示元素的个数。
一维数组的元素 数组名[下标] 从0开始 a[5]为第6个元素
注意一点 在c语言中只能一个一个的引用数组变量 而不能一次引用整个数组
定义数组时不能再方括号中用变量来表示元素的个数,但可以是符号常数或常量表达式。而引用数组元素时,方括号中既可以是常量、常量表达式、字符常数、又可以是变量、不过变量的值一定是确定的。
一维数组的初始化
1.可以只对数组元素部分初始化 int a[10]={1,3,5}
2.数组的一次性赋0 int a[10]={0}
3.可以不指定数组长度 int a[]={1,2,3,4,5}
二维数组
定义 类型说明符 数组名[常量表达式1][常量表达式2]
二维数组的初始化
1.按行分段赋值
2.按行连续赋值
对二维数组进行初始化时有以下几点需要注意:
1.可以对部分元素赋初值 未赋初值的元素自动取0
2.如果对全部元素赋初值,则第一维的长度可以不给出 int a[][3]={1,2,3,4,5,6,7,8,9}
指针的概念
使用指针可以表示复杂的数据结构 不需要命名就能够动态分配内存 还可以直接处理内存地址
内存的地址
内存单元的编号叫做内存的地址
内存是一个连续的物理空间 被划分为大小相等的内存单元 没个内存单元都分配一个固定的内存地址 内存地址也是连续的
程序中给出的地址往往只是内存的逻辑地址 还要通过操作系统的内存管理机制将逻辑地址映射为物理地址
指针和指针变量
指针就是内存的地址 是地址 是内存单元的编号 而内存单元的内容是存放在内存单元中的具体数据
C语言中可以用一个变量来存放指针(内存地址) 这种变量叫做指针变量 只是内存地址而已~~
严格区分 变量 变量的指针 变量的内容 指针变量 指针变量的内容=是地址
指针型变量的定义
1.指针类型说明 即定义该变量为一个指针变量 用*说明
2.指针变量名
3.指针变量的类型
一般类型 类型说明符 *指针变量名
指针型变量的引用
引用的方法 int *ptr,i;ptr=&i;将i的指针&i赋值给指针变量ptr
*叫做指针运算符 作用有2点:一是定义指针变量时作指针类型说明 表明定义的变量时指针型变量
二是用于直接访问指针变量所指向的内存单元
1.指针变量初始化方法
int a;
int *p=&a;这里一定要有*
在定义指针型变量p的同时将整形变量a的地址&a赋值给p
2.赋值语句的方法
int a;
int *p;
p=&a;
使用指针变量时 咬住运算符& 和*的使用顺序 顺序不同 所表达的意思也可能不同 他们优先级相同 自右而左结合
int *p,i=1,*q;
p=&i;
q=&*p; //=&i=i的地址
int i=2,j;
j=*&i; //吧i的内容赋值给j
指针作为函数参数
引入 实参-->形参 只是值传递 子函数中形参值的变量不影响主函数中实参的值!!
指针变量的函数参数
作用是将一个变量的地址传递给被调函数 这样就可以在被调函数中通过指针(地址)操纵主调函数中的变量了
被调函数定义的参数表列中参数一定是定义指针变量的形式 即形参一定是定义指针变量的形式
void swap(int *a,int *b)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
指向数组元素的指针