1,&用在声明的地方是引用,但是用在函数调用的时候或者语法上面是取地址符
int getnum(int &a);//这个是引用
getnum(&a); //这个是取地址
2,namespace很可能是包含一块领域的,例如 namespace QT,不能包含main不然会出错的,最好只包含你用的那一块。
3,c输出的格式符号表:
| ||||||||||||||||||
4,注意堆和栈的内存管理。因为栈的大小一般只有1M,所以对于int a[2173489217389127]这种行为而言,栈肯定会溢出的,所以这个时候只能用堆。
也就是int *a = new int[2189748923734334].
5,如果用转码工具一定要保证目前的编码正确,如果是UTF8转GBK的,如果文本本身不是UTF8的话,转出来肯定是乱码
6,全体赋值
void *memcpy(void *dest, const void *src, size_t n);
函数返回指向dest的指针。
例子:
|
1
2
3
4
5
6
7
8
9
10
11
|
#include<string.h>
int
main(
{
char
* s=
"GoldenGlobalView"
;
char
d[20];
memcpy
(d,s+12,4);
//从第13个字符(V)开始复制,连续复制4个字符(View)
d[4]=
'\0'
;
//memcpy(d,s+14*sizeof(char),4*sizeof(char));也可
printf
(
"%s"
,d);
getchar
();
return
0;
}
|
7,char与string的相互转化和部分转化
c_str()可以让string直接变成char*的头地址
char to string 可以直接转化,用 = 即可
string to char 用snprintf(char*, num, "%s", string.c_str());
部分转化:
char to char, string to char 用 strncpy(char*, src*, num);
string to string : string.assign(string, 下标(数字), num);
char to string : string.copy(char* , num, 下标);
更多string用法:http://www.cnblogs.com/xfreedom/archive/2011/05/16/2048037.html
8,线程数最好与电脑核数量一致,开设过多线程不会增加效率的
9,C的强制转换没有任何限制,可以随便转换,包括把不同类型的指针互相转换
static_cast是C++里面的类型安全转换,这个转换不允许将毫无关系的两个数据类型的指针互相转化;如果需要那样的转化,必须得用
reinterpret_cast,但是reinterpret_cast的可移植性很差很差,而且会引起很多的问题,像在同个基类的多个派生类之间相互转
10,|= 以及 << 位运算符的解释,|=与&=都是位运算符,用十进制不好表达,应该用2进制表示,这两个运算符跟 += 是类似的。意思为n |= m 也就是 n = n | m。
举个例子,a = 0100 然后 a |= (1 << 2) ,则 a = 0100.
因为 1<< 2 = 0100 然后 两者的或运算还是本身。所以a不变。
|= 是或等于,a |= b 就是 a = a | b。 而<<就是左移,要先转换成2进制
总之左移 就是: 丢弃最高位,0补最低位
再说右移,明白了左移的道理,那么右移就比较好理解了.
右移的概念和左移相反,就是往右边挪动若干位,运算符是>>.
右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:
int i = 0x80000000;
i = i >> 1; //i的值不会变成0x40000000,而会变成0xc0000000
就是说,符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.
负数10100110 >>5(假设字长为8位),则得到的是 11111101
总之,在C中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变 .实际应用中可以根据情况用左/右移做快速的乘 /除运算,这样会比循环效率高很多.

2995

被折叠的 条评论
为什么被折叠?



