使用作用域操作符获取全局变量的值
| #include <iostream> |
| |
| int reused = 42; |
| int main() { |
| |
| int unique = 0; |
| |
| std::cout << reused << ' ' << unique << std::endl; |
| int reused = 0; |
| |
| std::cout << reused << ' ' << unique << std::endl; |
| |
| std::cout << ::reused << ' ' << unique << std::endl; |
| return 0; |
| } |
引用
- 引用并非对象,相反的,它只是为一个已经存在的对象所起的另外一个名字 使用 '&'
| #include <iostream> |
| |
| int main() { |
| |
| int i = 1024, i2 = 2048; |
| int &r = i, r2 = i2; |
| int i3 = 1024, &ri = i3; |
| int &r3 = i3, &r4 = i2; |
| |
| std::cout << i << std::endl |
| << i2 << std::endl |
| << i3 << std::endl |
| << r << std::endl |
| << r2 << std::endl |
| << ri << std::endl |
| << r3 << std::endl |
| << r4 << std::endl; |
| |
| return 0; |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
空指针
| nullptr、0、NULL |
| NULL 在 #include <cstdlib> 中 |
只要指针拥有一个合法值,就能将它用在条件表达式中,如果指针的值是0,条件取false, 否则取true。
指针也可以用相等操作符( == ) 和不相等操作符( != )来比较。
void*指针
void* 可以存放任意对象的地址。
它可以:和别的指针比较、作为函数的输入输出或者赋给另外一个 void* 指针。
| double obj = 3.14, *pd = &pbj; |
| |
| void *pv = &obj; |
| pv = pd; |
声明符中修饰符的个数没有限制
| #include <iostream> |
| |
| int main() { |
| |
| int ival = 1024; |
| int *pi = &ival; |
| int **ppi = π |
| |
| std::cout << ival << std::endl |
| << *pi << std::endl |
| << **ppi << std::endl; |
| |
| |
| |
| |
| |
| |
| return 0; |
| } |
| |
指向指针的引用
| int i = 42; |
| int *p; |
| int *&r = p; |
| |
| r = &i; |
| *r = 0; |
类型别名
两种方法
| |
| typedef double wages; |
| typedef wages base, *p; |
| |
| |
| using SI = Sales_item; |
| |
| wages hourly, weekly; |
| SI item; |
注意
| typedef char *pstring; |
| const pstring cstr = 0; |
| const pstring *ps; |
| |
| |
| |
| |
| const char *cstr = 0; |
| |
decltype
作用:选择并返回操作数的数据类型
| decltype(f()) sum = x; |
| |
| |
| int i = 42, *p = &i, &r = i; |
| decltype(r + 0) b; |
| decltype(*p) c; |
| |
| |
| |
| |
| |
| |
| decltype((i)) d; |
| decltype(i) e; |
赋值是会产生引用的一类典型表达式,引用的类型就是左值的类型。也就是说,如果 i 是 int,则表达式 i = x 的类型是 int&。
自定义数据结构
在主函数完成Sales_data的操作
| #include <iostream> |
| #include <string> |
| #include "Sales_data.h" |
| |
| int main() { |
| |
| Sales_data data1, data2; |
| |
| double price = 0; |
| |
| std::cin >> data1.bookNo >> data1.units_sold >> price; |
| |
| data1.revenue = data1.units_sold * price; |
| |
| |
| std::cin >> data2.bookNo >> data2.units_sold >> price; |
| data2.revenue = data2.units_sold * price; |
| |
| if (data1.bookNo == data2.bookNo) { |
| unsigned totalCnt = data1.units_sold + data2.units_sold; |
| double totalRevenue = data1.revenue + data2.revenue; |
| |
| std::cout << data1.bookNo << ' ' << totalCnt << ' ' << totalRevenue << ' '; |
| if (totalCnt != 0) { |
| std::cout << totalRevenue / totalCnt << std::endl; |
| } else { |
| std::cout << "(no sales)" << std::endl; |
| } |
| return 0; |
| } else { |
| std::cerr << "Data must refer to the same ISBN" << std::endl; |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
编写自己的头文件
头文件保护符
#define
指令把一个名字设定为预处理变量
#ifdef
当且仅当变量已定义时为真
#ifndef
当且仅当变量未定义时为真
- 一旦检查结果为真,则执行后续操作直至遇到
#endif
指令为止
| #ifndef SALES_DATA_H |
| #define SALES_DATA_H |
| #include <iostream> |
| #include <string> |
| |
| struct Sales_data { |
| std::string bookNo; |
| unsigned units_sold = 0; |
| double revenue = 0.0; |
| }; |
| #endif |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!