在我调试和研究 netscape 系浏览器插件开发时,注意到了这个问题.即,在对象布局已知(即对象之间具有继承关系)时,不同类型对象的指针进行转换(不管是隐式的从下向上转换,还是强制的从上到下转换)时,编译器会根据对象布局对相应的指针的值进行调整.不管是 microsoft 的编译器,还是 gcc 编译器都会做这个动作,因为这和 C++ 对象模型有关. 举一个简单的例子,如下代码: #include <stdio.h> class A { public: int x; void foo1()
1.reinterpret_cast<type_id>(表达式)的作用: type-id 必须是一个指针.引用.算术类型.函数指针或者成员指针.它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针.type_id的作用是在赋值的时候用到 int i5=reinterpret_cast<int>(p);//前面是int,所以方括号里的也是int #include <iostream> using namespace std; int main() { char
void指针:主要是便于传递不同类型的参数 const指针: const char *p :const 在* 的左边表示指向一个常量指针:表示指向的内容不可变(*p不能变,p可以改变) int a = 3; int b = 4; const int *p = &a; p=&b;允许:但是*p = 5是不允许的: char * const p:const在* 的右边表示一个指针常量 int a = 3; int b = 4; char * const p = &a; p=&b
const对象: const对象声明时必须赋初值,该值在编译阶段确定,不可在程序中修改. const修饰符既可放在类型名前也可放在类型名后,通常放在类型名前.不过放在类型名后易于理解. const int a = 7; int b = 8; int array[a];//合法, a是const变量,值在编译阶段确认 int arr[b]; //不合法,b是个普通变量,值没有在编译阶段确定 指向const对象的指针: 可理解为“自认为指向const对象的指针”,其实际所指向的对象不一定是cons
int *const p=&a; 这是const指针,这种指针必须在定义时就给出它所指向的地址,否则会error:uninitialized const 'p'.const指针的指针本身是const类型,所以不能修改它所指向的地址,但可以修改它所指向的值. const int *p; 这是指向const对象的指针,可以修改指向的地址,但不能通过这种指针来修改它所指向的值,即使它所指向的值不是const类型的. const int *const p=&a; 这是指向const类型的const