高级指针(Day-8)
发布日期:2022-02-08 18:03:20
浏览次数:37
分类:技术文章
本文共 3094 字,大约阅读时间需要 10 分钟。
1. 结构体指针
1—
int main() { typedef struct teacher{ int number; int age; }Teacher; Teacher tea1 = { 1,28}; Teacher *p = &tea1; printf("%d %d", tea1.age, (*p).number); return 0;}
直接访问:tea1.number
间接访问:
(1) (*p).number // 因为”.”的优先级高于星号,所以需要用括号将前面的指针包起来,不能省略括号 (2)p->age // ->(箭头):一个减号,一个大于号 (最常用)int main() { typedef struct teacher{ int number; int age; char *name; }Teacher; // 结构体指针:指向结构体变量的指针 Teacher tea1 = { 1,28}; Teacher *p = &tea1; p->number = 6; printf("%d %d", p->number, (*p).number); // 结构体数组指针: Teacher tea[] = { { 1, 34, "zhang"}, { 2, 45, "wang"}}; Teacher *p = tea; if (p[0].age > p[1].age) { printf("%d %d %s\n", p->age, p->number, p->name); } else // 两种间接访问实现 printf("%d %d %s\n", (p + 1)->age, (*(p + 1)).number, (*(p + 1)).name); return 0;}
结构体数组的数组名是一个结构体指针常量
2—例题:Student stu = {1, “lan ou”, ‘m’, 95.6};将name第一个字母大写,name中所有的空格换成下划线,利用结构体指针实现。
typedef struct student{ int num; char name[10]; char gender; float score;}Student;int main() { { Student stu = { 1, "lan ou", 'm', 95.6}; Student *p = &stu; *(p->name) -= 32; for (int i = 0; i < (int)strlen(p->name); i++) { if ((*(p->name + i)) == ' ') { *(p->name + i) = '_'; } } printf("%s\n", p->name); return 0;}// 结果:Lan_ou
3—结构体数组与指针
typedef struct ranking{ int num; char name[10]; int score;}Ranking;int main() { Ranking rank[3] = { { 1, "Jay", 5000}, { 2, "Jack", 2000}, { 3, "Joe", 1000} }; Ranking *p = rank;// printf("%d, %s, %d", p[0].num, p[0].name, p[0].score); // 单个元素输出// printf("%d, %s, %d", p[1].num, p[1].name, p[1].score);// printf("%d, %s, %d", p[2].num, p[2].name, p[2].score); for (int i= 0; i < 2; i++) { for (int j = 0; j < j - i; j++) { if (p[j].score < p[j + 1].score) { Ranking temp = p[j]; p[j] = p[j + 1]; p[j + 1] = temp; } } } for (int i = 0; i < 3; i ++) { printf("%d, %s, %d\n", p[i].num, p[i].name, p[i].score); } return 0;}
2. 预编译指令
1—普通宏 :
关键字(#define) 宏名(全大写 或者 k+驼峰) 值 例如:MAX kMax 关键字(#undef 结束处) 宏名(定义的宏名)#define PI 3.1415926int main() { int a [5] = { 12, 34, 12, 11, 89}; for (int i = 0; i < COUNT; i++) { printf("%d", a[i]); }#pragma mark---------------预编译指令 double b = PI; printf("%f\n", b); // 宏定义结束#undef PI
2—带参数的宏
#define SUM(a, b) a + bint main(){ int a = SUM(2, 3); printf("%d\n", a); int c = SUM(2, 3) * SUM(4, 6); // 结果:20 2 + 3 * 4 + 6 = 20 想让它等于50 加个括号就可以啦}
所以在宏定义时,就最好加上括号
#define SUM(a, b) (a + b) // 避免出现扯淡的错误,防止受操作符优先级的影响
3—条件编译
// 第一种编译 如果定义了,执行a=10 否则执行a=100#define INT#ifdef INTint a = 10;#elseint a = 100;#endif// 第二种编译 如果没定义,执行代码1 否则执行代码2#define PI#ifndef PI//代码1#else//代码2#endif// 第三种编译 如果非0,执行代码1 为0执行代码2#if (2 + 3) // 常量表达式//代码1#else//代码2#endif
转载地址:https://blog.csdn.net/Evelynzn/article/details/48489477 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年03月21日 10时09分11秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Vue项目页面跳转时,窗口上方显示进度条(Vue使用NProgress)
2019-04-26
Vue+axios下载文件
2019-04-26
Element UI table宽度自适应
2019-04-26
Vue引入ECharts图表
2019-04-26
Vue watch监听数据 ECharts异步加载数据
2019-04-26
Vue 3.0引入axios
2019-04-26
网页自动适配 Mac 的 Dark Mode
2019-04-26
The server encountered an unexpected condition that prevented it from fulfilling the request.
2019-04-26
linux安装FastDFS+Nginx
2019-04-26
FastDFS上传文件示例
2019-04-26
Zookeeper集群
2019-04-26
SpringDataJPA入门及四种查询方式
2019-04-26
Spring Cloud Eureka & Spring Cloud Feign
2019-04-26
Spring Cloud Config & Spring Cloud Bus
2019-04-26
微服务容器部署与 jenkins 持续集成
2019-04-26
容器管理与容器监控
2019-04-26
java爬虫框架—WebMagic
2019-04-26
Java 基础之反射
2019-04-26
一起来学MySQL—常用内置函数
2019-04-26