8-13 刷题 复习 知识点集合

 

1.

//把数据类型去掉了看 简单很多的

指针常量

指针常量:顾名思义它就是一个常量,但是是指针修饰的。 
格式为:

int * const p //指针常量

 

在这个例子下定义以下代码:

int a,b;
int * const p=&a //指针常量
//那么分为一下两种操作
*p=9;//操作成功
p=&b;//操作错误

因为声明了指针常量,说明指针变量不允许修改。如同次指针指向一个地址该地址不能被修改,但是该地址里的内容可以被修改

常量指针

常量指针:如果在定义指针变量的时候,数据类型前用const修饰,被定义的指针变量就是指向常量的指针变量,指向常量的指针变量称为常量指针,格式如下

const int *p = &a; //常量指针

在这个例子下定义以下代码:

int a,b;
 const int *p=&a //常量指针
//那么分为一下两种操作
*p=9;//操作错误
p=&b;//操作成功

因为常量指针本质是指针,并且这个指针是一个指向常量的指针,指针指向的变量的值不可通过该指针修改,但是指针指向的值可以改变。

附加题

指向常量的指针常量该怎么写? 
答案:

const int * const b = &a;//指向常量的指针常量

 

2.下面代码的输出结果是()

int main(){

   int pid;

   int num=1;

   pid=fork();

   if(pid>0){

   num++;

   printf("in parent:num:%d addr:%x\n",num,&num);

   }

   else if(pid==0){

   printf("in child:num:%d addr:%x\n",num,&num);

   }

}

 

1.父子进程中输出的num相同,num地址不相同
2.父子进程中输出的num不同,num地址相同
3.父子进程中输出的num相同,num地址也相同
4.父子进程中输出的num不同,num地址不相同

解析:2

刚刚fork出来不止虚拟地址一样,物理地址也一样。当进程发生分歧时,即修改此变量时,才会分配不同的物理地址,也就是copy-on-write,写时复制。

 

3.

#include <iostream>

using namespace std;

class B0//基类BO声明
{
public://外部接口
	virtual void display()//虚成员函数
	{
		cout << "B0::display0" << endl;
	}
};

class B1 :public B0//公有派生
{
public:
	void display() { cout << "B1::display0" << endl; }
};

class D1 : public B1//公有派生
{
public:
	void display(){ cout << "D1::display0" << endl; }
};

void fun(B0 ptr)//普通函数
{
	ptr.display();
}

int main()
{
	B0 b0;//声明基类对象和指针
	B1 b1;//声明派生类对象
	D1 d1;//声明派生类对象
	fun(b0);//调用基类B0函数成员
	fun(b1);//调用派生类B1函数成员
	fun(d1);//调用派生类D1函数成员

	system("pause");
	return 0;
}
输出结果:B0::display0 B0::display0 B0::display0

解析:fun函数,传入的参数是一个类的对象,这样,派生类作为参数传入的时候,会自动的类型转换为基类对象,这样,display就只是执行基类的函数了。选B0::display() B0::display() B0::display()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值