//有如下C++代码:
struct A{//1
void foo(){printf("foo");}//2
virtual void bar(){printf("bar");}//3
A(){bar();}//4
};
struct B:A{//5
void foo(){printf("b_foo");}//6
void bar(){printf("b_bar");}//7
};
//那么
A *p=new B;//8
p->foo();//9
p->bar();//10
//代码顺序:8->5->1->4->3 9->2 10->7
//输出为:barfoob_bar
int main(){
int a[5]={1,2,3,4,5};
int *p=(int *)(&a+1);//&a是指向数组a的指针,&a+1则是指向数组后面的内存
printf("%d",*(&a+1));//不确定的数字
printf("%d",*(p-1));//p-1指向数组最后一个数字(因为p是int*)
}
//找出错误
int main()
{
int i=10;
int j=1;
const int *p1;//*p不可变,p可变,可以不初始化
int const *p2=&i; //和上面一样
p2=&j;//正确,p2可以变化
int *const p3=&i;//p3不可变,*p3可变,定义时必须初始化
*p3=20;//正确,*p3可变
*p2=30;//错误,*p2不可变
p3=&j;//错误,p3不可变
//答案:最后两行错误
return 0;
}
排列组合
题目:爸爸去哪儿中的3对父子站成一排,各自父子之间不能相邻,比如石头不能和郭涛挨着,以此类推,共有几种站法?
分类:
1.前3个位置有3个家庭组成:6*4*2*2*2*1
6:第一个位置有6个选择
4:第二位置有两个家庭(共4个人)
2:第三个位置有一个家庭(共2个人)
2:第四个位置还有3个人可选,但是有一个人和第三位置1家不可选
2:还有2个人可选
1:还有一个人
2.前3个位置有2个家庭组成,分为在第1和3位置:6*4*1*2*1*1
6:第一个位置有6个选择
4:第二个位置选另外两个家庭共4个人
1:第三个位置只能选和第一个位置同一个家庭的
2:第四个位置选未出现过的家庭(2个人)
1:只能选和第二个位置同一家庭的
1:只剩一人
多线程
线程可以继承父线程的所有堆和栈的数据,线程和线程之间有相互独立的栈空间
http
超文本传输协议
http是客户端和服务器之间的请求和应答的标准。用户通过web、网络爬虫等工具像网站(服务器)下载资源,向服务器端口(默认是80)发送http请求。一般基于TCP协议,但也不是必须。
ETAG是一个可以与Web资源关联的记号(token),可以反应信息是否过期。
浅拷贝的问题
class A{
int i;
};
class B{
A *p;
public:
B(){p=new A;}
~B(){delete p;}
};
void sayHello(B b){
}
int main(){
B b;
sayHello(b);
/*这一步,将创建一个新的B的对象(假设叫t),
(t=b)调用系统浅拷贝函数,最后执行两次delete p;
因为是浅拷贝t和b的资源一致,最后却被删了两次,第二次删除时程序崩溃
}
图和树
全连通图n个节点对应(n-1)+(n-2)+…+1=(n*(n-1))/2个边
树n个节点对应n-1个边
linux
linux下,指定文件file1为所有用户可读,可写,可执行,执行命令:chmod 777。修改file1的拥有者为test,拥有组为user,执行命令:chmod test