程序员面试宝典笔记一二

一、实现两个变量的交换,不借助中间变量

void change(int &a,int &b){

//方法一,这种方法的一个问题就是可能两个数相加越界

        //a=a+b;

        //b=a-b;

        //a=a-b;



//方法二,利用异或

        a=a^b;

        b=a^b;

        a=a^b;

}

 

二、比较两个数值的大小,不使用任何流程控制语句

int max=(a+b+abs(a-b))/2;

 

三、sizeof和strlen的区别

(1)sizeof是一个运算符,然而strlen是一个函数

(2)sizeof可以使用类型、变量或者函数作为参数(不能用于未知存储大小数据的数据类型),然而strlen必须使用char*作为参数,兵器必须是‘\0’结尾

(3)sizeof 的结果在编译的时候就计算过了,因此可以用来定义数组维数,然而strlen只是在运行的时候才计算

(4)sizeof计算内存分配的最大空间容量,而strlen计算实际占用的空间

(5)sizeof 的结果类型是size_t;是在头文件中被定义为的unsigned int 类型。

(6)sizeof在计算结构体或者类型的大小的时候需要考虑对齐(对数据体成员或者成员变量的对齐),sizeof计算的是栈中的分配大小,对于存放在全局数据区的静态变量不会计算在内,

(7)空类的sizeof为1,多重继承的空类空间为1,虚继承空间为4,只有成员函数的为一个指针大小4,具有成员变量的sizeof需要考虑成员变量的对齐。

(8)当数组在函数中传递的时候,已经退化为了一个指针,如果需要其大小,需要传入额外的大小信息。

 

 

 

  7 int main(){

  8         char *ss="0123456789";

  9         char s[10]="01234";

 10         int a[10]={1,2,3,4};

 11         string strArr1[]={"ab","cd"};

 12         string *pstrArr2=new string[2];

 13         cout<<"sizeof(ss)"<<sizeof(ss)<<endl;//结果是4

 14         cout<<"sizeof(*ss)"<<sizeof(*ss)<<endl;//结果是1

 15         cout<<"strlen(ss)"<<strlen(ss)<<endl;//结果是10

 16         cout<<"strlen(s)"<<strlen(s)<<endl;//结果是5

 17         cout<<"sizeof(a)"<<sizeof(a)<<endl;//结果是40

 18         cout<<"sizeof(string)"<<sizeof(string)<<endl;//结果是4,相当于指针大小

 19         cout<<"sizeof(strArr1)"<<sizeof(strArr1)<<endl;//结果是8,相当于两个指针大小

 20         cout<<"sizeof(pstrArr2)"<<sizeof(pstrArr2)<<endl;//结果是4,指针大小

 21         return 0;

 22 }

~         

 

 

 

四、指针

指针和引用

指针可以指向空值,引用不能为空,必须在定义的同时进行初始化,并且不能改变,当然引用变量的内容可以改变

const常量也必须在定义的同时进行初始化

 

 

 

你可能感兴趣的:(程序员)