C语言指针和结构体.doc
c 语 言 归 纳
结构体
1.结构体类型定义
#definen STUDENT struct student
student
{ int nun ;
char name[20] ;
char sex ;
int age ;
float score ;
char addr[30];
};
2.结构体变量定义
方式一: STUDENT student1 ,student2;
方式二: struct student
{ int nun ;
char name[20] ;
char sex ;
int age ;
float score ;
char addr[30];
} student1 ,student2 ;
3.结构体类型变量的引用
错误方式:printf(“%d %s %c %d %f %s\n”,student1) ;
正确方式: ①结构体变量名.成员名 ②(*p)->成员名③p->成员名
例:student1.num=1001 ;
4.结构体变量初始化
main()
{ struct student
{int num ;
char name[20] ;
char sex ;
char addr[30];
} a={ 89031 ,”li xiao” ,’m’ ,”101 beijing road “};
printf(“no:%ld\n name:%s\n sex:%c\n address:%s\n”,a.num,a.name,a.sex,a.addr);
5.用 typedef定义类型
typedef 已有类型 新定义类型
例:typedef int COUNT ;
typedef student STD ;
指针
直接访问:按变量地址存取变量的方法;
间接访问:变量地址存放在另一个内存单元中;
指针:即一个变量的地址;
指针变量:一个专门存放另一个变量地址;
定义方法:
int i , j ;
int *pointer1 , *porinter2;
指针变量赋值: pointer1=&I ; pointer2=&j ;
I 值
3
地址2000
pointer1 I
2000 3
地址:2000
指针变量引用:
(1)&取地址运算符 例&a为变量a的地址
(2)*指针运算符(间接访问)例*p为指针变量p所指向的变量
*&a=a ( *poinrer1) ++ 相当于a++
指针运算用于数组
p=&a[0] 指向数组第一个元素
p=a 同上;
定义时int *p=a;
“数组的指针” 是指数组的起始地址;
“数组元素的指针”是指数组元素的地址;
C语言规定 p+1就是指向数组下一个元素
p+I ;a+I 就是a[I]的地址,指向a数组第I个元素
* (p+I) 或* (a+I),是 p+I或 a+I 指向的数组元素 a[I](其中a为数组a的首地址)
指向数组的指针变量也可以带下标,如p[I]等价于* (p+I)
引用数组元素的方法
下标法: a[I] 指针法: * (a+I) 或 * (p+I)
(a)* (p++) 先取*p值再指针 p+1
(b)* (++p) 先使指针p+1,再取 *p的值
例 p初值为a ; (a)语句得a[0]的值 ; (b)语句得a[1]的值
(c) (*p)++表示p指向元素值+1 ( 即a[0]++ 如a[0]=3则 a[0]=4)
(d)*(p--)相当于a[I - -] ,先取p值作”*”运算,再p自减1
(e)*(++p)=a[++I ]即先p自加1 ,再作*运算
指针小结
定义 int I 定义整型变量 I ;
int *p p为指向整型数据的指针变量
int a[n] 定义整型数组a有个n元素;
int *p[n] 定义指针数组p,它由n个指向整型数据的指针元素组成
int (*p)[n] p为指向含有n个元素的一维数组的指针变量;
int f( ) f 为带回整型函数数值的函数
int *p( ) p为指向一个指针的函数,该指针指向整型数据
int **p p是指针变量,它指向一个指向整型数据的指针变量;
int (*p)( ) p为指向函数的指针,该函数返回一个整型值
main()
{ int max(int , int );
int (*p) ( ) /*指向函数的指针变量*/
int a,b,c ;
p=max; /*P指向max函数入口地址*/
scanf(“%d %d “,&a,&b);
c=