//
// main.c
// c结构体
//
// Created by stevenchang on 9/4/15.
// Copyright (c) 2015 cz. All rights reserved.
//
#include <stdio.h>
/**
局部变量和全局变量
结构体
共用体
枚举
*/
/**
全局变量在整个文件内有效,局部变量作用域从定义那行开始,知道方法体结束
同名变量,局部变量会覆盖全局变量
全局变量的使用:只有当此变量被全文使用时,可以使才用定义全局变量
*/
int a = 10; //这定义了一个全局变量
struct Date {
int year;
int month;
int day;
};
struct Person { //结构体类型分配的内存空间为最大元素空间的倍数
char *name;
struct Date date;
};
struct Student { //定义一个结构体类型,此时是不分配内存空间的
int age;
float weight;
char *name;
};
struct Teacher { //定义一个结构体,并定义一个变量tea
int age ;
double height;
char *name;
} tea;
enum Sex { //定义了一个枚举类型
male,
female
};
union Data { //定义一个共用体(联合体)
int a;
int b;
};
int main(int argc, const char * argv[]) {
// insert code here...
int a = 20; //这里定义了一个局部变量
printf("%d\n",a);
/**
结构体:是由多种数据类型组成的一种构造类型。
在定义结构体类型的时候,是不会分配内存空间的。
结构体也是存在作用域的,可以放在函数体内,也可以放在文件的开头部分。
*/
printf("===============================\n");
struct Student stu = {12,23.4,"steven"}; //当定义一个结构体变量和初始化的时候会分配内存空间
stu.age = 23; //通过结构体的点语法,我们可以对结构体中的元素进行赋值
printf("age=%d, weight=%f, name=%s\n",stu.age, stu.weight, stu.name);
printf("==================================\n");
struct Teacher tea = {34,45.5,"love"}; //虽然定义了变量但是不能直接使用tea,赋值时格式为struct Teacher tea = ......
tea.age = 20;
tea.height = 23.4;
tea.name = "Maggie";
printf("age=%d, height=%f, name=%s\n",tea.age, tea.height, tea.name);
/**
结构体数组
*/
printf("===============================\n");
struct Student stud[3] = {
{1,2.3,"adaf"},
{2,3.4,"jkljl"},
{3,4.5,"eqrq"}}; //定义了一个结构体数组用于存放多个结构体
//遍历结构体数组
for (int i = 0 ; i < 3; i++) {
printf("age=%d, weight=%f, name=%s\n",stud[i].age, stud[i].weight, stud[i].name);
}
/**
指向结构体的指针
*/
printf("===============================\n");
struct Teacher tea1 = {12,1.55,"aafaf"}; //结构体初始化和分配内存空间
struct Teacher *p = &tea1; //定义一个结构体指针并初始化
//输出结构体元素的集中方式
//1.使用tea1进行输出
printf("age=%d, height=%.2f, name=%s\n",tea1.age, tea1.height,tea1.name);
printf("age=%d, height=%.2f, name=%s\n",(*p).age, (*p).height,(*p).name);
printf("age=%d, height=%.2f, name=%s\n",p->age, p->height,p->name);
/**
结构体嵌套
*/
printf("================================\n");
struct Date date = {2011,12,23};
struct Person person = {"steven",date};
printf("year=%d, month=%d, day=%d\n",date.year, date.month,date.day);
printf("name=%s,year=%d,month=%d,day=%d\n",person.name, person.date.year, person.date.month,person.date.day);
/**
枚举类型:对于常量值,我们可以使用枚举类型
*/
printf("===============================\n");
enum Sex sex; //定义了一个枚举变量
sex = male; //对枚举变量sex进行赋值
printf("sex=%d\n",sex); //输出结果为1,枚举类型默认数据从0开始,后面一次增加
/**
共用体(联合体):分配的内存空间是最大元素的空间
每次使用只能取其中一个元素
*/
printf("=============================\n");
union Data data;
data.a = 12;
data.b = 123;
//输出结果相同,是因为他们使用的是同一块内存空间,因此赋值只能给其中一个赋值
printf("a = %d, b = %d\n", data.a, data.b);
return 0;
}
c语言复杂数据类型
最新推荐文章于 2025-02-28 00:15:00 发布