1.指针的值是一个地址,而*为取出地址中的值操作。
cout一个char*类型的相当于输出字符串,但是cout一个int*类型的就是输出地址了,比如
char* p = "abc";
cout << p << endl;
//abc
cout << *p << endl;
//a
int *p = &x
cout << p << endl;
//x的地址
2.如果一个类的构造函数只有一个参数,或者其他的都有默认值,那么就存在隐式转换的可能性。可以用关键字explict拒绝这种隐式转换。
3.C语言中逗号运算符的优先级最低,其次是有关赋值的运算符排在倒数第二(c++为倒数第三,倒数第二为throw)。记不清的话可以多加点括号,无伤大雅而且可理解性更好。
4.成员函数都有隐藏的this指针,而且如果为常成员函数,函数后面的const修饰的是this。
5.函数指针的格式为:函数返回类型 (指针) (参数)。
6.typedef 和define的区别,注意一切define都是替换!
#define dP int *
typedef int* tP;
int main()
{
dp a, b;
tP c, d;
}
除了b,其他都是指向int类型的指针
7.常对象只能调用常成员函数,因为只有常成员函数才能保证(注意保证两个字)不修改值。
8.sizeof数组名和sizeof指针不一样,当数组名通过参数传递时,在被调用的函数那边,数组会自动转换成指针。
9.malloc直接申请的是虚拟内存,不是物理内存
10.对函数指针赋值,加不加取地址符号(&)都一样,但是不能加(),()的意思是调用。函数指针在定义时带形参是可以的。
11.函数压栈的顺序是从右到左。
12.单目运算符的优先级一般都高于双目运算符。
13.gets函数接受一段字符串,直到遇到回车位置,并把回车转换为'\0'
14.如果一个类名ClassA,ClassA a表示声明定义了一个a,并调用了默认构造函数。而ClassA a(),你的本意是调用默认构造函数,但是编译器会这是一个函数声明。
15.非常量引用的初始值必须为左值。
在标准C++语言中,临时量(术语为右值,因其出现在赋值表达式的右边)可以被传给函数,但只能被接受为const &类型。