一种c++问题求教
第一种:
- C/C++ code
void fun(int& a,int* p){ printf("%d,%d,%d",&a,p,&p);}void main(){ int a = 10; int b = 20; fun(a,&b);}
第二种:
- C/C++ code
class A{};class B{};class C:public A,B{};void main(){ A* a = new A; B* b = new B; C* c = new C; C* c2 = (C*)a; C* c3 = (C*)b; printf("%d,%d,%d",c,c2,c3);}
这两种类型的题,答案都是让选择一些地址值,具体要怎么分析喃?
[解决办法]
第一种:
printf("%d,%d,%d",&a,p,&p);
打印出a的地址,p的值,p的地址
a是引用,所以同main里面的a,p是main里面b的指针,p的值也就是b的地址,p的地址和a,b没有关系
第二种:
printf("%d,%d,%d",c,c2,c3);
打印出c的值,c中属于A的起始地址,c中属于B的起始地址
[解决办法]
处理器的基本指令格式:
operator operand2 operand2; // 指令名称 操作数1 操作数2
指令执行的时候需要把操作load到CPU的寄存器,操作数在内存的位置就是地址, 存储地址的变量就是指针。
指针是有类型的(除了void*), 比如int* 和 char*是不同类型的指针。
[解决办法]
楼主要理清楚了,
- C/C++ code
#include <stdio.h> #include <iostream.h> void fun(int& a,int* p){ cout<<"a引用的地址:" << &a <<endl; cout<<"a引用的地址存的值:" << a <<endl; cout<<"p指针指向的地址:" << p <<endl; cout<<"p指针指向的地址存的内容:" << *p <<endl; cout<<"p指针存放的地址:" << &p <<endl;}void main(){ int a = 10; int b = 20; cout<<"a的地址:" << &a <<endl; fun(a,&b);}
[解决办法]
- C/C++ code
A* a = new A; B* b = new B; C* c = new C;//C对象的首地址 C* c2 = (C*)a;基类A的首地址 C* c3 = (C*)b;//基类B的首地址; printf("%d,%d,%d",c,c2,c3);
[解决办法]
- C/C++ code
void fun(int& a,int* p){ printf("%d,%d,%d",&a,p,&p); //p是局部变量指向你实参的地址b,与b的地址一致,但是&p是指针的地址,两者不同; //局部变量&a是就是main函数的a的一个引用,即地址是一致的!}void main(){ int a = 10; int b = 20; fun(a,&b);}