C和C++基础语法集锦
不常用C/C++,整理一些基础语法备忘。
编译器知识
一般在苹果机之外的电脑,printf() 从左往右扫描,从右往左计算。
在苹果机下,printf 从左往右扫描,从左往右计算。
这其实和编译器用的c库有关。一般大家为了方便,直接通过在mac下安装xcode,进而达到安装c库的目的。所以在使用printf()的时候最好避免进行计算。下面代码在mac运行下为 2 2 2 2,别的电脑下运行为: 2 2 3 2。
1 |
|
类型转换
1. int to char
int a = 1; char b = a+'0';
2. char to int
C语言中每一个字符都是一个数字(ANSII码),int to char 只要减 ‘0’ 就好。char在技术实现上是整数类型,
char a = '1'; int b = a-'0';
待续。
函数
- scanf()函数返回的值为:按指定格式正确地输入变量的个数。具有短路性质,即当第n个变量输入错误时,返回n-1,而不对之后的变量正确性做判断。出错时则返回EOF(-1)。
集合
set和multiset会根据特定的排序准则,自动将元素进行排序。不同的是后者允许元素重复而前者不允许。
获取UNIX时间戳
在Linux系统中,时间戳是一个绝对值,表示距离时间(1970-1-1, 00:00:00)的秒数。在C\C++ 语言中,用数据类型 time_t 表示时间戳,time_t 本质上是一个long int。
目前许多操作系统使用32位二进制数字表示时间。此类系统的Unix时间戳最多可以使用到格林威治时间2038年01月19日03时14分07秒(二进制:01111111 11111111 11111111 11111111)。其后一秒,二进制数字会变为10000000 00000000 00000000 00000000,发生溢出错误,造成系统将时间误解为1901年12月13日20时45分52秒。这很可能会引起软件故障,甚至是系统瘫痪。使用64位二进制数字表示时间的系统(最多可以使用到格林威治时间292,277,026,596年12月04日15时30分08秒)则基本不会遇到这类溢出问题。[2]
time(2) - Linux man page
1 | #include <time.h> |
实现代码如下:
1 | #include<iostream> |