一些笔记

来源:互联网 发布:中国电信oa软件 编辑:程序博客网 时间:2024/06/05 04:07
1、下面这个参数const,为什么可以改变参数?
void fun(const auto_ptr<int> &pointer)
{
*pointer = 4;
pointer.reset(new int(2));  //这一句编译不通过,所以pointer为const,但是可以更改指向的数据
}
int main()
{
auto_ptr<int> p(new int(3));
fun(p);
cout<<*p<<endl;
}


2、当有符号数与unsigned数运算的时候,有符号数数转换unsigned
unsigned int a = 2;
int b = -5;
printf("%d\n", a + b); //不明白为什么输出-3
cout<<a+b<<endl;//输出很大的一个数
而对于浮点数来说,浮点数(float,double)实际上都是有符号数,
unsigned 和signed前缀不能加在float和double之上,当然就不存在有符号数根无符号数之间转化的问题了。

3、进行地址0地方的函数
typedef void (*pFun)();
(*(pFun)0)();
4、strace是一个非常有用的程序,它可以告诉你程序使用了哪些系统调用和这些系统调用的参数,返回值。


5、
unsigned float2bit(float f)
{
union
{
float f;
unsigned u;
}temp;
temp.f = f;
return temp.u;
}
int main()
{
cout<<float2bit(4.5)<<endl;  输出一个很大的数。
return 0;
}


6、纯虚析构函数一定要实现,不能只有一个声明。
如下为例子:
class A
{
public:
A(){}
A(int _a) : a(_a){}
virtual ~A() = 0;
private:
int a;
};


class B : public A
{
public:
B(){}
B(int _a):A(_a){}
~B(){}
private:
};
这段代码编译不通过,因为类A的析构函数没有实现。


7、要求:统计输入字符串中出现'A'字符的次数并删除,要求用尽量少的内存和尽量快的算法..
size_t RemoveCount(char *des, const char *src, const char target)
{
assert(des != NULL);
assert(src != NULL);


char *write = des;
const char *read = src;
size_t res =0;
while (*read != '\0')
{
if (*read == target)
{
read++;
res++;
}
else
*write++ = *read++;
}
return res;
}


int main()
{
const char *src = "alkdjflakldsjfALAKJDSFLKJSDADJKFLDSFLJDF";
char *des = new char[strlen(src) + 1];
memset(des, '\0', strlen(des) + 1);
cout<<RemoveCount(des, src, 'A')<<" "<<des<<endl;
}
原创粉丝点击