我的机子用Xcode,单位是字节
0开头为8进制
0x为16进制
cout默认输出的是10进制
wchar_t 宽字节,它是一种足够大的整形类型,可以用来表示的是比如中文的编码
c常量一旦被定义,就不能被修改(const)
浮点数,c++中浮点数在计算内存中由两部分组成,一部分为基数,一部分用来表示浮点,这个浮点是用二进制来表示。
非常大或者非常小的数可以用e表示法来表示
这个程序充分说明了精度的问题,double能保存更高的精度。对于c++来说float只能保存6位有效数字,如果需要更高的精度,使用double。 在默认情况下,浮点数的类型是double。
涉及不同类型的数进行运算,首先会把精度小的数转化为精度大的数。
auto 相当于var类型
尽量让编译器去计算元素数目更为安全。数组比字符串长,没有什么害处。
’s’ 和 “s”的区别, ’s’是一个单字符,代表一个ASCII码,而”s”代表2个字符’s’和'\n’。
使用cin中的get()或者getline(),getline()读取一条语句。
可以用数组的访问形式来访问string类型。
区别字符数组和string之间操作之间的差别。
对字符数组来说用在<cstring>类中得strcpy,strcat,strlen来进行复制和连接作用。
string的大小可以自动调整,也就是说可以在一个string类型变量后面不断加上字符串
而字符数组不行。
对于字符型数组来说,如果未被定义就使用strlen方法来数组长度的话,可能与字符数组定义的长度不一。strlen从数组的第一个元素开始计算字节数,直到遇到空字符。对于未被初始化的数组,空字符的出现是随机的,所以得到的数组长度可能与定义的不同
struct ,union 的区别
union一次只使用一个成员变量,即成员变量是在一块内存中的。
枚举类型的取值范围是大于最大值的最小2的幂减一。
double占用8个字节 int float4字节(我的)
在指针使用的时候特别注意下面的情况
这里说明的是指针初始化后,给地址分配了内存空间,但是他的值的内容并没有分配空间,所以直接使他的内容为单值是错误的。
数组其实和指针有很大的联系,数组可以看作一个指针,数组定义后,可以用指针的操作符去操作数组,
cout 和cin对于指针的使用,对于字符数组和字符串传入的是一个地址,而且是首个字符的地址。
所以cout<<ps-----可以打印他们的值,如果要显示他们的地址则cout<<(int *)ps ,这个时候才会打印ps指针和字符串的地址。
但是对于值类型来说,如 int *p cout<<p 则打印的是p的地址。
chark[]="helloworld";
char* ps=newchar(strlen(k)+1);
char* ps=newchar(strlen(k)+1);
strcpy(ps,k);
创建新的副本
用strcpy和strncpy来将字符串赋值给数组。
这里相当于c#里的foreache语句,对于要改变数组值的地方用&x,而输出的话直接x;
EOF的使用xcode 是用ctrl+d的组合。
c++中将一指针数组初始化为一组字符串常量;
cin>>c;这个表达式也会有一个返回值,比如c是整型的,但是输入的却是个字符串,则返回false,输入的字符串还是保存在缓存区。
c++函数无法返回一个字符串 所以只能返回他的地址
这时候 函数中要创建一个新的指针变量 长度为字符串的长度加1 最后一位赋值为n+1
//c++函数指针——指正需要都用小括号括起来
double calculate(double x,double y,
double (*p)(double,double)){
return p(x,y);
}
c++的泛型方法当有个特殊类型需要特殊对待的时候可以采取
template<> char * maxn<char *>(char * arr[],int arrSize)
的显示声明。
chaff *sc= new (buffer) chaff [2]; //method 1----在buffer的第一个元素内存上创建,buffer是个数组,这两个元素共用一个存储空间
对于一个事物存在多种状态,通常都是通过声明一个public的枚举,再在私有属性中添加个对象来表示不同的状态,比如坐标的直角坐标和极坐标
对于赋值运算符的重载,在构造函数中如果有new运算符,这这里需要先清除当前的内存,然后再进行赋值操作
3. 模板类型:
模板类型不是一种实类型,它必须等到类型绑定后才能确定最终类型,所以在实例化一个模板时,必须要能够让编译器“看到”在哪里使用了模板,而且必须看到模板确切的定义,而不仅仅是它们的声明,都则不能顺利地产生编译代码。因此,标准会要求模板的实例化与定义体放到同一编译单元中。
虚基类的作用:
多继承的基础上,使多层继承的子类所继承的相同的方法都来自基类