结构体(2)
来源:互联网 发布:vps安装python 编辑:程序博客网 时间:2024/06/07 19:52
指向结构体数组的指针
struct student t[3] = {{0, "zhang", 20}, {1, "li", 20}, {0, "张三", 20}};
结构中的数组成员和指针成员
一个结构中可以有数组成员,也可以有指针成员,如果是指针成员结构体成员在初始化和赋值的时候就需要提前为指针成员分配内存。
struct man{ char name[100]; int age;};struct man{ char *name; int age;};
在堆中创建的结构体
如果结构体有指针类型成员,同时结构体在堆中创建,那么释放堆中的结构体之前需要提前释放结构体中的指针成员指向的内存。
struct man{ char *name; int age;}; struct man *s = malloc(sizeof(struct man) * 2); s[0].name = malloc(10 * sizeof(char)); s[1].name = malloc(10 * sizeof(char));
将结构作为函数参数
将结构作为函数参数
将结构指针作为函数参数
结构,还是指向结构的指针
在定义一个和结构有关的函数,到底是使用结构,还是结构的指针?
指针作为参数,只需要传递一个地址,所以代码效率高
如果一个结构体变量做为函数的参数,效率极低。同时老的C编译器都不支持传递结构变量,只支持传递结构指针。
远指针与近指针
返回值区别:返回结构体变量和数组变量
代码示例
struct student { int id; char name[100]; int age;}struct man { int id; char *name; int age;}int main(){ struct student t1 = {0, "张三", 20}; struct student *p = &t1; printf("s1 name = %s\n", p->name); // 张三 struct student t[3] = {{0, "zhang", 20}, {1, "li", 20}, {0, "张三", 20}}; struct student *p = t1; printf("s1 name = %s\n", p.name); // zhang for (int i = 0; i < 3; i++) { printf("s%d name %s\n", i, p[i].name); } // 结构体在堆中. struct man *m = malloc(sizeof(struct man)); m->id = 1; m->age = 20; // 结构体的元素也在堆中. m->name = malloc(10); strcpy(m->name, "hello"); printf("id=%d age=%d name=%s\n", m->id, m->age, m->name); free(m->name); free(m); // 结构体数组. struct man *m = malloc(sizeof(struct man) * 10); for (int i = 0; i < 10; i++) { m[i].id = i; m[i].age = i; m[i].name = malloc(10); sprintf(m[i].name, "%d", i); } // 打印. for (int i = 0; i < 10; i++) { printf("id = %d, age = %d, name = %s\n", m[i].id, m[i].age, m[i].name); } // 销毁. for (int i = 0; i < 10; i++) { free(m[i].name); } free(m); struct man m1 = {0, "zhang", 20}; func1(m1); printf("id = %d, name = %s\n", m1.id, m1.name); // id = 0, name = li func2(&m1); printf("id = %d, name = %s\n", m1.id, m1.name); // id = 2, name = li return 0;}void func1 (struct man m){ printf("id = %d, age = %d, name = %s\n", m.id, m.age, m.name); strcpy(m.name, "li"); m.id = 2;}void func2 (struct man *m){ printf("id = %d, age = %d, name = %s\n", m.id, m.age, m.name); strcpy(m.name, "li"); m.id = 2;}// 函数返回结构体struct man func3(){ struct man *m = malloc(sizeof(struct man)); m->id = 1; m->age = 20; strcpy(m->name, "hello"); return m;}// 返回值无效char *func4(){ char buf[100] = {"hello"}; return buf}
阅读全文
0 0
- 结构体对齐2
- 结构体2
- 结构体小结2
- (2)结构体
- 结构体学习2
- 结构体(2)
- 第十六周 OJ<2>---结构体---职工信息结构体
- alsa结构体流程2
- 项目2:日期结构体
- 【项目2-日期结构体】
- 数组、结构体、指针2
- 结构体小案例2
- 结构体应用(2)
- 十六周结构体2
- 17-结构体实践2
- 预处理和结构体2
- 结构体
- 结构体
- 背包算法
- Destroying Array(并查集 高能坑点)
- hibernate中事务管理
- 关于lib文件的介绍
- 压缩感知重构算法之迭代硬阈值(Iterative Hard Thresholding,IHT)
- 结构体(2)
- 写给人类的机器学习 翻译完成
- Unity3D学习入门笔记(四)
- Dubbo框架之基础
- 连续打印“i++,--i,i++”出现的结果
- 数字三角形
- jdbc日期处理
- Flume中的HDFS Sink配置参数说明
- 16