c/c++学习------>结构体

本文详细介绍了C语言中结构体的定义、初始化及使用方法,包括通过指针操作结构体成员,以及如何将结构体作为函数参数传递。此外,还探讨了结构体在函数中的基本操作,如创建、打印、排序等。


结构体

1.定义和初始化

struct Teacher 
{
     char name[32];
     int age;
     int id;
};
struct Teacher t1 = {"name", 54, 01}; //结构体类型 定义变量并初始化。

typedef struct Student 
{
     char name[32];
     int age;
     int id;
}Student;
Student t2;
t2 = {"name1", 22, 02}; //先定义变量,再进行初始化。

2.使用结构体
t1.name = "name2";   //第一种:通过寻址操作进行,寻址操作本身没有操作内存,赋值的时候才操作内存。
t1.age = 50;

Student *p = NULL;	//第二种:通过指针间接赋值改变数据。
p = &t2;
p->name = "sduiso";	
p->age = 20;

3.结构体做函数参数(结构体变量 PK 结构体指针)

结构体变量做函数参数修改的是的形参的值,和实参没有半毛钱关系;但是用结构体指针做函数参数时,修改的是实参本身。
typedef struct Teacher
{
     char name[32];
     int age;
     int id;
}Teacher;

void copyTeacher(Teacher *to, Teacher *from)
{
    *to = *from;
}

int main()
{
    Teacher t1 = {"name", 54, 01};
    Teacher t2;
    Teacher t3;
    t2 = t1;
    printf("t2.name:%s\n", t2.name); name//c编译器支持结构体赋值操作
    printf("t2.age:%d\n", t2.age);    54

    copyTeacher(&t3, &t1);		//传结构体指针当函数参数
    printf("copyTeacher() after............\n");
    printf("t3.name:%s\n", t3.name);  name
    printf("t3.age:%d\n", t3.age);    54

    return 0;
}

4.结构体做函数基本操作
/*--------------------------------------------------------------------------------------*/
typedef struct Teacher
{
     char name[32];
     int age;
     int id;
}Teacher;


Teacher * creatTeacher01(int num)		//在堆上申请内存空间	
{
    Teacher * tmp = NULL;
    tmp = (Teacher*)malloc(sizeof(Teacher) * num);
    if (tmp == NULL)
    {
        printf("tmp malloc memory size fail.\n");
        return NULL;
    }
}
int creatTeacher02(Teacher **pT, int num)    	//二级指针,实参取地址传给形参(二级指针接一级指针),间接修改实参的值
{
    int ret = 0;
    Teacher * tmp = NULL;
    tmp = (Teacher*)malloc(sizeof(Teacher) * num);
    if (tmp == NULL)
    {
        ret = -1;
        printf("tmp malloc memory size fail:%d\n", ret);
        return ret;
    }
    *pT = tmp;
    return ret;
}


void freeTeacher(Teacher *p)		//释放内存
{
    if (p != NULL)
    {
        free(p);
        p = NULL;
    }
}
void printTeacher(Teacher *array, int num) //打印{ int i=0; for(i=0; i<num; i++) { printf("array[i].age:%d\n", array[i].age); }}void sortTeacher(Teacher *array, int num) //排序{ int i, j; Teacher tmp; for (i=0; i<num; i++) { for(j=0; j<num; j++) { if (array[i].age > array[j].age) { tmp.age = array[i].age; array[i].age = array[j].age; array[j].age = tmp.age; } } }}int main(){

    int ret = 0;
    int i = 0;
    Teacher Array[3];
    int num = 3;
    Teacher *pArray = NULL;

    //pArray = creatTeacher01(num);
    ret = creatTeacher02(&pArray, num);
    if (ret != 0)
    {
	printf("creatTeacher() return err:%d", ret);
	return ret;
    }

    for(i=0; i<num; i++)
    {
        printf("Please input age:");
        scanf("%d", &(pArray[i].age));
    }
    printTeacher(pArray, num);
    sortTeacher(pArray, num);
    printTeacher(pArray, num);
    freeTeacher(pArray);
    return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值