nullnull 结构体与指针null1.1 结构体
结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整体---- 自定义数据类型
结构体类型定义struct [结构体名]
{
类型标识符 成员名;
类型标识符 成员名;
…………….
};成员类型可以是
基本型或构造型struct是关键字,
不能省略合法标识符
可省:无名结构体null例 struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}; 结构体类型定义描述结构
的组织形式,不分配内存结构体类型定义的作用域null1.2 结构体变量的定义
1.先定义结构体类型,再定义结构体变量
一般形式: 例 struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];};
struct student stu1,stu2; struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….};
struct 结构体名 变量名表列;null例 #define STUDENT struct student
STUDENT
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
STUDENT stu1,stu2; null2.定义结构体类型的同时定义结构体变量
一般形式:struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}变量名表列;例 struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu1,stu2; null3.直接定义结构体变量
一般形式:struct
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}变量名表列;例 struct
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu1,stu2; 用无名结构体直接定义
变量只能一次null4.说明
结构体类型与结构体变量概念不同
类型:不分配内存; 变量:分配内存
类型:不能赋值、存取、运算; 变量:可以
结构体可嵌套
结构体成员名与程序中变量名可相同,不会混淆
结构体类型及变量的作用域与生存期
nullnull 1.3 结构体变量的引用
1.引用规则
结构体变量不能整体引用,只能引用变量成员
可以将一个结构体变量赋值给另一个结构体变量
结构体嵌套时逐级引用引用方式: 结构体变量名.成员名nullnullnull1.4 结构体变量的初始化
1.形式一:struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….
};
struct 结构体名 结构体变量={初始数据};例 struct student
{ int num;
char name[20];
char sex;
int age;
char addr[30];
};
struct student stu1={112,"Wang Lin”,‘M’,19, “20 Beijing Road”};null2.形式二:struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}结构体变量={初始数据};例 struct student
{ int num;
char name[20];
char sex;
int age;
char addr[30];
}stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”}; null3.形式三:struct
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}结构体变量={初始数据};例 struct
{ int num;
char name[20];
char sex;
int age;
char addr[30];
}stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”}; null1.5 结构体数组
1.结构体数组的定义
三种形式:形式一:
struct student
{ int num;
char name[20];
char sex;
int age;
};
struct student stu[2];null形式二:
struct student
{ int num;
char name[20];
char sex;
int age;
}stu[2];形式三:
struct
{ int num;
char name[20];
char sex;
int age;
}stu[2];null2.结构体数组初始化null顺序初始化:
struct student
{ int num;
char name[20];
char sex;
int age;
};
struct student stu[ ]={100,“Wang Lin”,‘M’,20,
101,“Li Gang”,‘M’,19,
110,“Liu Yan”,‘F’,19}; null3.结构体数组引用引用方式: 结构体数组名[下标].成员名null例 统计后选人选票struct person
{ char name[20];
int count;
}leader[3]={“Li”,0,“Zhang”,0,”Wang“,0};
main()
{ int i,j; char leader_name[20];
for(i=1;i<=10;i++)
{ scanf("%s",leader_name);
for(j=0;j<3;j++)
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;
}
for(i=0;i<3;i++)
printf("%5s:%d\n",leader[i].name,leader[i].count);
}null2 指针地址指针变量:用当前变量来存放另一个变量的地址,则当前变量是一个~。指针变量的值:指针变量中存放的值是地址。指针变量的定义:
类型标示符 *标示符例: int *pointer
*表示该变量是一个指针变量
指针变量名为pointer,不是*pointer指针变量的引用指针变量的引用运算符:
1. & 取地址运算符
后跟目标,其结果是一个指针
2. * 指针运算符
后跟指针,其结果是目标null例:
main()
{ int a,b;
int *pointer_1,*pointer_2;
a=100;b=10;
pointer_1=&a; pointer_2=&b;
printf(“%d,%d\n”,a,b);
printf(“%d,%d\n”, *pointer_1,*pointer_2);
}运行结果:100,10
100,10null 3 结构体和指针
1.指向结构体变量的指针
定义形式:struct 结构体名 *结构体指针名;
例 struct student *p;存放结构体变量在内存的起始地址null使用结构体指针变量引用成员形式指向运算符
优先级: 1
结合方向:从左向右例 指向结构体的指针变量例 int n;
int *p=&n;
*p=10; n=10nullmain()
{ struct student
{ long int num;
char name[20];
char sex;
float score;
}stu_1,*p;
p=&stu_1;
stu_1.num=89101;
strcpy(stu_1.name,“Li Lin”); //把字符串2拷贝到字符串1中
p->sex='M';
p->score=89.5;
printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n",
(*p).num,p->name,stu_1.sex,p->score);
}null1.指向结构体数组的指针例 指向结构体数组的指针struct student
{ int num;
char name[20];
char sex;
int age;
}stu[3]={{10101,"Li Lin",'M',18},
{10102,"Zhang Fun",'M',19},
{10104,"Wang Min",'F',20}};
main()
{ struct student *p;
for(p=stu;pnum,p->name,p->sex,p->age);
}null动态存储分配 参看189页
1. malloc
2. free调用形式
(类型说明符 *)malloc (size)调用形式
free (指针变量)null4 用typedef定义类型 参看207页
功能:用自定义名字为已有数据类型命名
类型定义简单形式: typedef type name;例 typedef int INTEGER;类型定义语句关键字已有数据类型名用户定义的类型名例 typedef float REAL;类型定义后,与已有类型一样使用null例 INTEGER a,b,c;
REAL f1,f2; 说明:
1.typedef 没有创造新数据类型
2.typedef 是定义类型,不能定义变量
3.typedef 与 define 不同 define typedef
预编译时处理 编译时处理
简单字符置换 为已有类型命名 定义结构体类型定义结构体类型typedef struct node
{
int data;
int age;
} LNode
LNode linklist;定义新类型名LNode,它代表上面定义的是一个结构体类型,
后可以直接用LNode来定义变量。struct node
{
int data;
int age;
}
typedef struct node LNode
LNode linklist;nullnull#define statcksize 100
Typedef struct sqstack
{
int data[statcksize];
int top;
}Sqstack;
Sqstack *s;s->top= 0;s->data[top]=100;nullTypedef struct lnode
{
int data;
struct lnode next;
}lnode,Lstack;
Lstack s; s->data=100;
本文档为【结构体、指针(精炼)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。