一、class和struct有什么区别
这里有两种情况的区别:
1)C语言的struct和C++的class区别
这种情况下,C语言的struct结构体就像是一种复杂的数据结构类型定义,struct中只能定义数据成员,不能定义函数。
举例:下面这段代码在C语言中
struct Point
{
int x;//合法
int y;//合法
void print()
{
printf("Point print\n")://编译错误
}
};
上面的代码会产生编译错误,是因为C语言并不支持结构体里面定义函数成员。
2)C++中的struct和class的区别
这种情况下,结构体和类基本上是相似的,先看下面的代码:
#include
using namespace std;
//类
class CPoint
{
int x;//默认为private
int y;//默认为private
void print()//默认为private
{
cout<<"Point:("<< x << ","<< y <<")" <
在上面的程序中,struct还有构造函数和成员函数。其实它还拥有class的其他特性,例如继承和虚函数等。C++中的struct扩充了C的struct功能。
我们编译上面的代码,发现编译错误全部都是因为访问private成员引起的。由此可知,class中默认的成员访问权限是private的,而struct中则默认是public权限。
总结:C语言的struct与C++的class区别:struct只是一种复杂的数据类型定义,不可以用于面向对象编程。
C++中的struct与class的区别:对于成员访问权限而言,class默认是private的,而struct中则默认是public的。
二、常见文件系统 系统函数
1、fcntl 文件控制
int fcntl(int fd, int cmd);
fcntl()针对(文件)描述符提供控制.参数fd 是被参数cmd操作的描述符.
针对cmd的值,fcntl能够接受第三个参数int arg
2、open 打开文件
int open(const char * pathname, int flags);
int open(const char * pathname, int flags, mode_t mode);
pathname是路径,flags是与打开方式相关的一些标志,mode是模式选择
3、creat 创建新文件
int creat(const char * pathname, mode_t mode);
4、close 关闭文件描述符
int close(int fd);
5、read 读文件
ssize_t read(int fd, void * buf, size_t count);
buf是目标缓存区,count是字节大小,从文件中读到缓存区中
6、write 写文件
ssize_t write(int fd, const void *buf, size_t nbyte);
buf是指定的缓存区,nbyte是大小,从buf中写到文件中
7、readv 从文件读入数据到缓冲数组中
ssize_t readv(int fd, const struct iovec *iov, int iovcnt);
iov是结构体数组,每个元素指向一个缓冲区,iovcnt是数组中元素的个数
8、writev 将缓冲数组里的数据写入文件
ssize_t writev(int fd, const struct iovec *iov, int iovcnt);
9、pread 对文件随机读
ssize_t pread(int fd, void * buf, size_t count, off_t offset);
buf是用来存放读取的数据的缓冲区,count是读取的大小,offset是开始读取点的文件偏移量
10、pwrite 对文件随机写
ssize_t pwrite(int fd, const void * buf, size_t count, off_t offset);
buf是用来存放要写入文件中的数据,offset是文件偏移量,从哪里开始写入
三、堆和栈的区别
堆:一般由程序员分配释放,若程序员不释放,会造成内存泄漏,程序结束时可能由OS回收,分配方式和链表类似。
栈:由操作系统自动分配和释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
四、memcpy和strcpy的区别
1)复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2)复制的方法不同。strcpy不需要指定长度,遇到 '\0' 结束复制,所以容易产生溢出。memcpy则是根据第三个参数决定复制的长度,限制了大小所以不会出现溢出,是安全的。
3)用途不同。通常在复制字符串时用strcpy,而在需要复制其他类型数据时一般用memcpy。
五、Volatile与Register修饰符的作用
Volatile的作用是:
作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值,Volatile表示这个变量会被一项不到的改变,每次使用它的时候都需要重新从内存中读取一遍,确保读到的值是最新的,不适用于寄存器保存的副本。
1)并行设备的硬件寄存器(如:状态寄存器)
2)一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3) 多线程应用中被几个任务共享的变量
Register修饰符的作用:
暗示编译程序相应的变量将被频繁的使用,如果可能的话,将其保存在CPU的寄存器中,加快其存取的速度。