############程序员面试宝典##########
1 预处理指令#define声明一个常数,用以表明1年中有多少秒
#define SECOND_PER_YEAR (60*60*24*365UL)
#define 语法的基本知识(不能以分号结束)
预处理将会计算常数表达式的值,写出如何计算一年中有多少秒而不是计算出实际的值更有意义
有可能将一个16位机整形数溢出,因此要用到长整形符号L,告诉编译器这个常数是长整形数。
2 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个
#define MIN(A,B) ((A)<=(B)?(A):(B))
在C程序中,const的用法主要有定义常量、修饰函数参数、修饰函数返回值。在C++程序中,它还可以修饰函数的定义体,定义类中某个函数为恒态函数。
3关于sizeof
struct{
short a1;
short a2;
short a3;
}A;
struct{
long a1;
short a2;
}B;
int main()
{
char *ss1="0123456789"; cout<<sizeof(ss1)<<endl; //指针大小为4
char ss2[]="0123456789"; cout<<sizeof(ss2)<<endl; //数组大小为10+1
char ss3[100]="0123456789";cout<<sizeof(ss3)<<endl;//数组的大小为100字节
int ss4[100];cout<<sizeof(ss4)<<endl;//数组的大小为400字节
char q1[]="abc";cout<<sizeof(q1)<<endl;//数组的大小为4字节
char q2[]="a\n";cout<<sizeof(q2)<<endl; //\n为一个字节 总共3个字节
char *q3="a\n";cout<<sizeof(q3)<<endl;//指针大小为4
char *str1=(char*)malloc(100);cout<<sizeof(str1)<<endl;//指针大小为4
void *str2=(void*)malloc(100);cout<<sizeof(str2)<<endl;//指针大小为4
cout<<sizeof(A)<<endl;//A中最大的长度为2字节 用2字节对齐,总共为6字节
cout<<sizeof(B)<<endl;//B中最大的长度为4字节 用4字节对齐,总共为8字节
return 0;
}
4 关于sizeof
class A1
{
public:
int a;
static int b;
A1();
~A1();
};
class A2
{
public:
int a;
char c;
A2();
~A2();
};
class A3
{
public:
float a;
char c;
A3();
~A3();
};
class A4
{
public:
float a;
int b;
char c;
A4();
~A4();
};
class A5
{
public:
double d;
float a;
int b;
char c;
A5();
~A5();
};
int main()
{
cout<<sizeof(A1)<<endl; //静态变量放在全局数据区,而sizeof计算栈中分配的大小 所以大小为4字节
cout<<sizeof(A2)<<endl;//为了照顾对齐,用int的四字节对齐,sizeof为8字节
cout<<sizeof(A3)<<endl;//float为四个字节 A3为8字节
cout<<sizeof(A4)<<endl;//float为四个字节 A3为12字节
cout<<sizeof(A5)<<endl;//double为八个字节 A3为24字节
return 0;
}
5 sizeof和strlen
sizeof可以用类型做参数,strlen只能是char* 且必须以\0结尾。数组做sizeof的参数不退化,传递给strlen就退化为指针。大部分编译程序在编译时就把sizeof计算过了,strlen的值在运行的时候才能计算。
7 sizeof
int test(char var[])
{
return sizeof(var);
}
int main()
{
char var[10];
cout<<sizeof(var)<<endl; //输出数组的大小10
cout<<test(var)<<endl;//var[] 退化为指针输出的大小4
return 0;
}