会计学
1
CC程序设计复合数据类型
[例] 交换两数。
void swap( );
main( )
{int a, b;
scanf(%d%d”,&a,&b);
swap(&a, &b);
printf(“%d,%d”,a,b);
}
void swap( int *p1, int *p2)
{int t;
t=*p1, *p1=*p2, *p2=t ;
}
2000H
2001H
2EA0H
2EA1H
a=10
b=8
内存
地址
变量
10
8
指针变量
p2=&b=2EA0H
:
:
:
3100H
3101H
3802H
3803H
2000H
2EA0H
p1=&a=2000H
第1页/共62页
变量的指针变量
1) 指针变量的定义
<类型标示符> * <变量名> ;
[例] int *p1, *p2;
2) 指针变量的赋值
指针变量=&变量
[例] 先定义后赋值:p1=&a; p2=&b;
定义时赋初值: int a, *prt=&a;
其中: &是取指针(地址)运算符。
赋初值问题:一个指针变量被定义后,在赋予某一变量的指针以前,其值是随机的,这个随机数可能恰好是系统区的某单元的地址。在系统不知和不受系统管理的情形下改写其中内容是危险的。变量的地址是由系统分配和管理的,因而是安全的。
3)指针变量的使用
p1=&a; p2=&b; scanf(“%d%d”, p1, p2);
t =*p1; *p1=*p2; *p2= t;
第2页/共62页
其中:* 号是取值运算符。
* 与 & 是一对互逆运算。
例如:*(&a) <=> a ; &( *p ) <=> p
*指针变量 <=> 变量
例如: p=&a ; *p 就是a ;
定义时的 * 与使用时的 * 含义不同,前者表示定义的是指针变量;后者是对变量的取值运算。
定义了一个某类型的指针变量后,它可以指向任意一个同类型变量。
4)指针变量作函数参数
主调函数 被调函数
实参 形参
&a p
p p
第3页/共62页
数组类型
数组的特点:
(1) 数组中的每一个元素均属于同一类型,我们称这种类型为数组的基类型;
(2) 每个数组中的元素个数一经确定后就保持不变,我们称它为数组的长度;
(3) 数组中的每个元素均为变量,我们用数组下标来直接访问数组的元素;
(4) 数组中的元素还允许是数组类型,从而产生二维数组、多维数组等结构;
(5) 在数组定义中,常量表达式的值虽然指出了数组元素的个数,但C编译器不做越界检查;
(6) 数组名表示数组所用空间的首地址,也就是数组第0个元素的地址。是一个常量地址。
一、一维数组的声明
格式:类型 数组名[常量表达式];
二、一维数组的引用与初始化
第4页/共62页
引用形式: 数组名[下标]
初始化形式:存储类别 数据类型 数组名[数组长度]={初始化值};
例: static int a[5]={10,20,30,40,50};
一般要求:只有定义为静态或外部存储的才能初始化。
三、数组作为函数的参数(传递地址)
例:对一字符串反序输出。()
四、二维数组的声明
形式: 类型 数组名[常量表达式][常量表达式];
如:int scores[50][3];
说明:编译程序为二维数组分配存储空间时是按行进行的,即先按顺序存放第一行的所有数据,然后接着按顺序存放第二行的所有数据,如此类推。二维数组scores的存储空间分配如下图所示:
第5页/共62页
┃ ...
┣━━━━━━━
25000 ┃ scores[0][0]
CC程序设计复合数据类型PPT学习教案 来自淘豆网m.daumloan.com转载请标明出处.