c语言程序构造数据类型问答,c语言构造数据类型

1.

/*

typedef:给老的数据类型取别名;可以简写复杂的数据类型;

*/

typedef unsigned int ui;

typedef int *pint;//pint是个类型,int *的新名字;

typedef int (*pfunc)(int ,int );//pfunc是个类型,表示函数指针类型;

int add(int a,int b)

{

return a+b;

}

int main(int argc, const char * argv[])

{

ui a = 10;//用新的数据类型定义一个变量;

printf("a=%u\n",a);

int b=20;

pint p = &b;//p是int *型

printf("*p=%d\n",*p);

// pint q[3];//指针数组;

pfunc pf = add;//pf是个变量

printf("add rst=%d\n",pf(a,b));

return 0;

}

2.

/*

结构体:关键字 struct

*/

#include

struct student//定义了一种新的数据类型;

{

char name[20];//成员变量;存储空间说明:加入是一个鞋柜,char占20个字节,需要20个空间,int 需要4的字节空间,所以工需要28个空间;

int age;

int height;

};

typedef struct student stu;

typedef struct student//定义了一种新的数据类型;

{

char name[20];//成员变量;

int age;

int height;

}stu;

int main()

{

struct student xiaoming = {"xiaoming",18,188};//struct student是数据类型:xiaoming是变量名;

printf("sizeof(struct student) is %lu\n",sizeof(struct student));

//访问结构体的成员变量

xiaoming.age=30;

//1:改名字

strcpy(xiaoming.name,"wangcai");

//2:升级

strcat(xiaoming.name,"6s");

printf("name:%s,age:%d,height:%d\n",xiaoming.name,xiaoming.age,xiaoming.height);

stu xiaohong = {"xiaohong",18,165};

printf("name:%s,age:%d,height:%d\n",xiaohong.name,xiaohong.age,xiaohong.height);

return 0;

}

#include

typedef struct student//定义了一种新的数据类型;

{

char name[20];//成员变量;

int age;

int height;

}stu;

int main()

{

stu class[10]={};

stu *pst;//pst就是一个指针,stu是pst指向的数据类型;pst可以指向class里的任何一个元素;

//给数组所在元素赋值

class[0].age = 18;

//name :ios1518+2位学号

//height :180,175~180之间浮动

//age :15~24

for(int i=0;i<10;i++)

{

sprintf(class[i].name,"ios1518%02d",i+1);

class[i].age = 15+i;

class[i].height=random()%10+175;//random()表示是随机数;random()%10表示取0~9之间的任意数字;

}

//遍历学生信息

for(int i=0;i<10;i++)

{

printf("name=%s,age=%d,height=%d\n",class[i].name,class[i].age,class[i].height);

}

//按照身高排序:排序的主体是数组的元素,但key是元素的身高,排序需要将整个构造体全部元素进行排序

for(int i=0;i<10-1;i++)

{

for(int j=0;j<10-i-1;j++)

{

if(class[j].height>class[j+1].height)

{

stu temp = class[j];

class[j] = class[j+1];

class[j+1] = temp;

}

}

}

printf("========================================\n");

//遍历学生信息

for(int i=0;i<10;i++)

{

printf("name=%s,age=%d,height=%d\n",class[i].name,class[i].age,class[i].height);

}

//使用pst指针访问数组,

// pst = &class[0];//指针指向首个元素

pst = class;

printf("sizeof(stu)=%lu,sizeof(class)=%lu\n",sizeof(stu),sizeof(class));

//访问第一个元素

printf("first info ,name:%s,age:%d,height:%d\n",pst->name,pst->age,pst->height);

printf("=========================================\n");

//遍历学生信息

for(int i=0;i<10;i++)

{

printf("name:%s,age:%d,height:%d\n",(pst+i)->name,(pst+i)->age,(pst+i)->height);

}

}

typedef struct student

{

char name[20];

int age;

int height;

union//联合体:二选一的关系

{

int stuid;

char nickname[20];

};

/*

共享同一段内存,按情况去解析;

内存大小按大的计算;//所以此结构体占用的内存是20+4+4+20=48字节;

初始化的时候,按照第一个解析;

*/

}stu1;

int main()

{

stu1 xiaohong = {"xiaohong",20,165,0};//开始的时候只能按照int进行初始化,不能用nickname;

strcpy(xiaohong.nickname, "旺财");

printf("%s\n",xiaohong.nickname);

return 0;

}

3.

/*

枚举:一枚一枚的举出来;把一个变量的合理取值列举出来;

枚举是整形常量,把变量的合理取值列举出来;

列举的常量,默认从0开始,后面一次加1;

*/

typedef enum weekday

{

Monday=1,//可设置,后面按照设置的值一次加1;

Tuesday,

Wednesday,

Thursday,

Firday,

Saturday,

Sunday

}WEEKDAY;

int main()

{

// enum weekday day;

WEEKDAY day;

printf("sizeof(day)=%lu\n",sizeof(day));//sizeof(day)=4,因为其实际保存的都是int类型;

printf("Monday=%d\n",Monday);

printf("Sunday=%d\n",Sunday);

printf("请输入周几\n");

scanf("%d",&day);

switch (day)

{

case Monday:

printf("Monday\n");

break;

case Tuesday:

printf("Tuesday\n");

break;

case Wednesday:

printf("Wednesday\n");

break;

case Thursday:

printf("Thursday\n");

break;

case Firday:

printf("Firday\n");

break;

case Saturday:

printf("Saturday\n");

break;

case Sunday:

printf("Sunday\n");

break;

default:

printf("error\n");

break;

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值