常识
● 指针常量和常量指针
指针常量:指针变量不容修改;
常量指针:指针指向的内容不容修改;
// 指针常量 - const在后
char* const ptr0 = "0aaa";
// 常量指针 - const在前
const char* ptr1 = "1bbb";
char const* ptr2 = "2ccc";
std::cout<<ptr0<<" "<<ptr1<<" "<<ptr2<<std::endl;
PS: 指针常量并不代表指针指向的内容就一定可以修改,如果指向一个常量,那么此时内容也是不容修改的。
● 宏嵌套
有 '#' 或 '##' 的时候,宏嵌套宏并不能有效的展开,此时需要多加一层宏进行转换
#define _TO_STRING(str) #str
#define TO_STRING(str) _TO_STRING(str)
#define _INT_SPLICE(x,y) (x##y)
#define INT_SPLICE(x,y) _INT_SPLICE(x,y)
算法
● x=x&(x-1)
其中x是整数,没执行一次,x从低位到高位数,第一个出现的1的位置被清零。
对次表达式计算,可算出x对于二进制数中出现1的个数。