c 基础(5) 结构体

1.结构体 定义和赋值

struct students
{
	//成员列表
	char name[21];
	unsigned int age;
	char tel[16];
	float scores[3];
	char sex;
}stu = { "尼古拉斯",500,"13888888888",100.0f,200,300,'M' };

int main02()
{
	printf("姓名:%s\n", stu.name);
	printf("年龄:%d\n", stu.age);
	printf("电话: %s\n", stu.tel);
	printf("成绩: %.1f   %.1f   %.1f\n", stu.scores[0], stu.scores[1], stu.scores[2]);
	printf("性别: %s\n", stu.sex == 'M' ? "男" : "女");
	system("pause");
	return EXIT_SUCCESS;
}

  2.第二种按照结构体顺序 赋值

struct students
{   //成员列表
	char name[21];
	unsigned int age;
	char tel[16];
	float scores[3];
	char sex;        }
int main()
{
	struct  students   stu = { "尼古拉斯",500,"13888888888",100.0f,200,300,'M' };    }

3.第三种赋值

struct students
{
	//成员列表
	char name[21];
	unsigned int age;
	char tel[16];
	float scores[3];
	char sex;
}

int main()
{
	strcpy(stu.name, "谢广坤");
	stu.age = 50;
	strcpy(stu.tel, "13777777778");
	stu.scores[0] = 90;
	stu.scores[1] = 80;
	stu.scores[2] = 70;
	stu.sex = 'F';
}

二.结构体数组

struct stu
{
	//成员列表
	char name[21];
	unsigned int age;
	char tel[16];
	float scores[3];//scores[0]
	char sex;
};
int main04()
{
    //结构体数组
	struct stu  s[2];
	for (int i = 0; i < 2; i++)
	{
		printf("请您输入 姓名  年龄  电话  成绩  性别:\n");
		scanf("%s%d%s%f%f%f,%c", s[i].name, &s[i].age, s[i].tel, &s[i].scores[0], &s[i].scores[1], &s[i].scores[2], &s[i].sex);
	}

	for (int i = 0; i < 2; i++)
	{
		printf("姓名:%s\n", s[i].name);
		printf("年龄:%d\n", s[i].age);
		printf("电话: %s\n", s[i].tel);
		printf("成绩: %.1f   %.1f   %.1f\n", s[i].scores[0], s[i].scores[1], s[i].scores[2]);
		printf("性别: %s\n", s[i].sex == 'M' ? "男" : "女");
	}
	system("pause");
	return EXIT_SUCCESS;
}

三.堆空间开辟结构体

   1.使用malloc创建一个  结构体类型的指针 p    ,访问结构体内部数据时,使用 p->name  ,而内部name又是一个char类型指针

    2.再为name开辟堆内存,再使用strcpy赋值     3.释放时,先释放小的,再释放打大的

struct tec
{
	char *name;    //4
	int age;    //4
}t;

int main()
{
	struct tec * p = (struct tec *)malloc(sizeof(t));
	p->name = (char *)malloc(sizeof(char) * 21);

	strcpy(p->name, "牛玲");
	p->age = 18;

	printf("%s   %d\n", p->name, p->age);

	if (p->name  != NULL)
	{
		free(p->name);
		p->name = NULL;
	}

	if (p)
	{
		free(p);
		p = NULL;
	}

	printf("%d\n", sizeof(struct tec *));
	system("pause");
	return EXIT_SUCCESS;
}

四.结构体嵌套

struct stra
{
	int a;  //4   4             
	float b;//4   8
	char c;//1   12  9
	char arr[7];   //16
	double h;//24
}abc;

struct  strb
{
	struct stra abc;//12  16
	short f;  //2
	char * e;  //4
	short g;
	//double d; //8
};

二.联合体(共用体)

    1.求共用体  的sizeof 是看最大的数据类型             2.共用体最后被赋值的数据  c才是准确的  其他的可能被覆盖

union vars
{
    double a;
    float b;
    int c;
}var;


    printf("%d\n", sizeof(var));  8
    var.a = 100;
    var.b = 3.14;
    var.c = 66;
    printf("%f\n", var.a);        100.000000
    printf("%f\n", var.b);        0.000000
    printf("%d\n", var.c);        66

三.枚举

   1.默认枚举中的值从0 开始自增   2.如果给red手动赋值  10 那么后面还是依次递增1 

enum colors
{
    red,bule,yellow,black,white,green
}clo;

int main14()
{
    int val;
    scanf("%d", &val);
    switch (val)
    {
        case red:
            break;
        case bule:
            break;
        case yellow:
            break;
        case black:
            break;
        case white:
            break;
        case green:
            break;
        default:
            break;
    }
    system("pause");
    return EXIT_SUCCESS;
}

四.typedef

   简化命名,  起别名

typedef unsigned long long ull;

struct studentsInfoList
{
	char name[20];
	char sex;
};
typedef struct studentsInfoList sinfo;

int main115()
{
	sinfo s1;
	ull a = 10;
	printf("%d\n", a);   10            }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章