#include <stdio.h>
#include <stdlib.h>
//定义结构体类型,并给该结构体类型起个新名字All,注意有符号变量的位宽,以及最高位用来表示正负。
typedef struct
{
int i;
int j[3];
int k1:3;
int k2:5;
float m;
} All;
//定义结构体类型J
struct J
{
unsigned int j1:4;
unsigned int j2:4;
unsigned int j3:4;
unsigned int j4:4;
};
//定义联合体变量 bk,里面包含1个变量i和一个结构体类型为J的结构体变量j
union
{
unsigned int i;
struct J j;
} bk;
void bill( All *pii)
{
pii->i=12;
pii->j[2]=34;
pii->k1=2;
pii->k2=3;
pii->m=3.21;
}
//定义一个链表结构体,包含向前的指针、存储的数字、向后的指针,指针指向的类型为自身
struct Link
{
struct Link *pre;
int mm;
struct Link *nex;
};
int main()
{
All axx;
axx.i=5;
axx.j[0]=8;
axx.k1=-1;
axx.k2=15;
axx.m=1.32;
printf("Hello world!\n");
printf("axx.i= %d\n",axx.i);
printf("axx.j[0]=%d\n",axx.j[0]);
printf("axx.k1= %d\n",axx.k1);
printf("axx.k2= %d\n",axx.k2);
printf("axx.m= %f\n",axx.m);
printf("--------------------------------------------------------\n");
bill(&axx);
printf("axx.i= %d\n",axx.i);
printf("axx.j[0]=%d\n",axx.j[0]);
printf("axx.k1= %d\n",axx.k1);
printf("axx.k2= %d\n",axx.k2);
printf("axx.m= %f\n",axx.m);
printf("--------------------------------------------------------\n");
bk.i=0x1234;
printf("bk.j.j1=%d\n",bk.j.j1);
printf("bk.j.j2=%d\n",bk.j.j2);
printf("bk.j.j3=%d\n",bk.j.j3);
printf("bk.j.j4=%d\n",bk.j.j4);
printf("--------------------------------------------------------链表测试\n");
//定义三个结构体类型为Link的结构体变量,并对结构体的数值变量赋值,然后将3个结构体变量通过内部指针首尾相连互相咬合组成环状
struct Link link1,link2,link3;
link1.mm=11;
link2.mm=22;
link3.mm=33;
link1.nex=&link2;
link2.nex=&link3;
link3.nex=&link1;
link1.pre=&link3;
link2.pre=&link1;
link3.pre=&link2;
//通过当前结构体变量的向后指针读取指向的下一个结构体内的变量
printf("link1.nex-->%d\n",link1.nex->mm);
printf("link2.nex-->%d\n",link2.nex->mm);
printf("link3.nex-->%d\n",link3.nex->mm);
printf("---------------------------------------------\n");
//通过当前结构体变量的向前指针读取指向的上一个结构体内的变量
printf("link1.pre-->%d\n",link1.pre->mm);
printf("link2.pre-->%d\n",link2.pre->mm);
printf("link3.pre-->%d\n",link3.pre->mm);
return 0;
}
以前经常糊里糊涂的,现在明白了,变量成员的用.通过指针寻址的成员用箭头。
|