C++个人语法错误记录

1,&用在声明的地方是引用,但是用在函数调用的时候或者语法上面是取地址符

int getnum(int &a);//这个是引用

getnum(&a); //这个是取地址


2,namespace很可能是包含一块领域的,例如 namespace QT,不能包含main不然会出错的,最好只包含你用的那一块。


3,c输出的格式符号表:

輸入格式符號輸入資料型態
%d整數
%f浮點數
%c字元
%s字串
%e科學符號
%u不帶符號10進位整數
%o8進位整數
%x16進位整數
 


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的指针。

例子:

作用:将s中第13个字符开始的4个连续字符复制到d中。(从0开始)
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;
}
输出结果: View



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中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变 .实际应用中可以根据情况用左/右移做快速的乘 /除运算,这样会比循环效率高很多.



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值