系列练习题(C/C++)

时间:2023-02-27 18:56:39

1、*(p++)、*(p)++、*(++p)

#include<stdio.h>
int main()
{
int*p = NULL;
int a[]={1,2,3,4};
p=a;
/* *(p++) += 100;
printf("%d,%d,%d,%d,%d\n",*p,a[0],a[1],a[2],a[3]);*/ //2,101,2,3,4

/* *(p)++ += 100;
printf("%d,%d,%d,%d,%d\n",*p,a[0],a[1],a[2],a[3]);*/ //2,101,2,3,4

/* *(++p) += 100;
printf("%d,%d,%d,%d,%d\n",*p,a[0],a[1],a[2],a[3]);*/ //102,1,102,3,4
return 0;
}
//*(p++),指针p先进行*运算,然后指针++
// *(++p),指针先++,再进行*运算

2、以下属于ios常用的多线程编程组件有:

(1)NSThread

(2)NSOperationQueue

(3)GCD


3、已下代码输出的是

#include<stdio.h>
class A
{
public:
A(){ printf("A");}
~A(){ printf("~A");}
};
class B: public A
{
public:
B(){ printf("B");}
~B(){ printf("~B");}
};

int main()
{
A* c = new B[2];
delete[] c;
return 0;
}


系列练习题(C/C++)

解析:
在C++中,析构函数的作用是:当一个对象被销毁时,调用析构函数对类对象和对象成员进行释放内存资源。
当我们定义一个指向派生类类型对象指针时,构造函数按照从基类到派生类的顺序被调用,但是当删除指向派生类的基类指针时,派生类的析构函数没有被调用,只是调用了基类的析构函数,此时派生类将会导致内存泄漏
我们需要将基类的析构函数声明为虚函数,此时在调用析构函数的时候是根据ptr指向的具体类型来调用析构函数,此时会调用派生类的析构函数。


4employee的表结构及数据结构如图所示,以下语句结果分别为:

ID      Name      Score
1 jack 1
2 tom 1
3 rose null

select count(*) from employee;select count(1) from employee;select count(Score) from employee;

3 3 2

解析:Count(1)和Count(*)实际上的意思是,评估Count()中的表达式是否为NULL,如果为NULL则不计数,而非NULL则会计数。
比如 select count( ) from tablename  则结果为零,而 select count(*) 或者 count(1)或者count('anything') from tablename 则都可以统计到表中所有行数。


5、sizeof操作符

#include<iostream>
#include<stdio.h>
using namespace std;
class A
{
public:
A(){};
virtual play(){};
};
int main()
{
A a;
cout<<sizeof(a); //4
}

class A{/*public: A(){}; virtual play(){ };*/};int main(){ A a; cout<<sizeof(a);//1 } 

class A{public: A(){}; /*virtual play(){ };*/};int main(){ A a; cout<<sizeof(a);//1 } 


6、缺省的Linux系统中,从后台启动进程,应在命令的结尾加上符号&