-
求一个负数的二进制:
首先,找到其正数二进制表达形式;
然后,对最高位取1,获得原码;
其次,除最高位(符号位)不变外,其余位取反,获得反码;
最后,在反码的基础上加1,获得补码,也就是计算机对该负数的二进制表达。
计算机用补码表示负数,可以同正数一样对其进行加法操作。
查看全部 -
RAII(resource acquisition is initialization)
class A
{
A();//创建资源
void fun();//操作资源
~A();//释放资源
};
查看全部 -
浅拷贝
深拷贝
查看全部 -
引用
与指针类似,相当于指针plus版
int &ra=a;
类中对象用指针需要用"->"来操作
A *pa=&a;
pa->data=20;
类中对象用引用时用"."来操作
A &ra=a;
ra.data=20;
二者其他区别:
引用必须有初始化值,指针可以赋值为nullptr
引用不可以二次赋值,指针则可以
查看全部 -
A.B则A为对象或者结构体; 点号(.):左边必须为实体
A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针; 箭头(->):左边必须为指针;
编联
将一个指针的类型做成强转,然后调用 func 函数,func 函数会随着被强转的类型的变换而变换,这种函数的关联过程称为编联。
静态编联
在编译阶段就将函数实现和函数调用关联起来,因此静态联编也叫早绑定
动态编联
在程序运行时动态地进行,根据当时的情况来确定调用哪个同名函数
查看全部 -
子类和父类相互转换
Staff * staff = coder; // 子类转父类隐式转换就可以
Coder * coder = (Coder *)staff; // 父类转子类必须显式转换查看全部 -
分部门的方式:多态公有继承
子类中使用 public 修饰符,那么父类中的成员函数和成员变量将会保持父类的权限。这种是使用最广泛的继承方式,我们把它叫做公有继承。
查看全部 -
类的继承
类,就像是对某一类事物的抽象模版,而在某些场景下,我们希望对抽象的内容进行扩增,或者说更加具体化。为了完成这种关系,便是继承。
class Coder : public Staff
{
};查看全部 -
不可重载的运算符:
.
.* ->*
::
sizeof
?:
#查看全部 -
拷贝构造函数
Staff(const staff &staff);
memcpy(mem,staff.mem,20);
是C和C++使用的内存拷贝函数,函数原型为void *memcpy(void *destin, void *source, unsigned n);函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即从源source中拷贝n个字节到目标destin中。
查看全部 -
声明函数指针
int(*funcP)(int a,int b)
指针指向函数
int(*funcP)(int a,int b)=func1;
通过指针调用函数
(*funcP)(5);
int ret=(*funcP)(5);带返回值
函数中传入函数
int dowork(int a,int b,int (*callback)())
{
......
int ret=(*callback)();
}
回调函数/钩子函数 :应用到函数中插入代码/多线程中
查看全部 -
指针声名
指针运算
地址 * > 内存
地址 &<内存
int*p=&a; //变量A的地址赋值给指针P,P指向变量A
指针和数组
int*p=arr;(数组变量名)
p+1(实际上是地址+类型大小)
p[1]=>*(p+1)指针偏移操作
指针和结构体
struct S *p=&s;
p->a=12;
p->b=22;
查看全部 -
大端字节序(big endian):高位在前。在IO和网络传输方面采用方式,大端字节序又被称之为网络细节序
小端字节序(little endian):低位在前。大部分机器采用小端字节序
查看全部 -
7
0111
1111原码
1000反码
1001补码
查看全部 -
#include <stdio.h>
#include <stdlib.h>
int * func()
{
int * arr = (int *)malloc(4 * sizeof(int));
return arr;
}
int main(int argc,char **argv)
{
int * p = func();
free(p);
return 0;
}查看全部
举报