1. String类的实现
string::string(const char* str)
{
if(str==NULL)
{
m_data=new char[1];
m_data='\0';
}
else
{
m_data=new char[strlen(str)+1];
strcpy(m_data,str);
}
}
string::string(const string& str)
{
m_data=new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
}
string& string::operator=(const string& str)
{
if(this==&str)
{
return *this;
}
delete[] m_data;
m_data=new char[strlen(str)+1];
strcpy(m_data,str.m_data);
return *this;
}
string::~string(void)
{
delete [] m_data;
}
2. 引用”与指针的区别是什么?
- 指针通过某个指针变量指向一个对象后,对他所指向的变量简介操作。引用 本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
- 流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、
3. 下面关于“联合”的题目的输出?
union
{
int i;
char x[2];
}a;
void main()
{
a.x[0]=10;
a.x[1]=1;
printf("%d",a.i);
getchar();
}
- 首先是低位a.x[0]=0x0a a.x[1]=0x01
- a内存是0x00000000共四个字节。 通过赋值后内存为0x0000010a
- 在windows系统是低字节在前,高字节在后,得出的结果是266(010A)
在linux系统是高字节在前,低字节在后,得出的结果是0x(0A010000) - 联合体的内存是共享的,所有变量共用一块内存,为最大内存空间变量的内存空间
4. char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。
char *strcpy(char *strDest, const char *strSrc)
{
assert((strDest!=NULL)&&(strSrc!=NULL));
char *address=strDest;
while((*strDest++=*strSrc++)!='\0')
NULL;
return address;
}
int strlen( const char*str ) // 输入参数const
{
assert( str != NULL ); // 断言字符串地址非0
int len = 0;
while( (*str++) !='\0' )
{
len++;
}
return len;
}
5. h头文件中的ifndef/define/endif 的作用。
- 防止该头文件被重复引用。
6.<.h> 与”.h”的区别?
- 标准库的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。
7. 描述内存分配方式以及它们的区别?
- 静态存储区,如全局变量,静态变量,程序运行期间一直存在
- 栈,如函数局部变量,函数执行结束时,内存资源被释放。
- 堆,如指针,又称动态内存分配空间。程序在运行的时候用malloc 或new 申请任意多少的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活。
8. 链表题:一个链表的结点结构
typedef struct node
{
int data;
struct node *next;
}node;