资源描述:
《有关指针的经典面试题集合》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、有关指针的经典面试题 C语言为何如此长寿并实用?C++为什么有那么多精彩?指针可以说是C/C++中的灵魂所在,虽然早期中pascal也有指针,但是和C/C++比起来不是一个级别的.今天为大家深入浅出的解析一下指针的有关笔试,面试题.所有题目来源网络,分析是我写的...0.预备知识,最基础的指针其实最基础的指针也就应该如下面代码:inta;int*p=&a;也就是说,声明了一个int变量a,然后声明一个int的指针,*p指向a的地址,&也就是取地址符号,而*是指针中取内容的符号,仅仅在声明的时候
2、标记这个变量是指针.可能有点绕口,但是看代码来的容易的多...1.与const在一起的时候常常声明的时候会让人一头雾水,比如下面的声明,均是声明一个char*p的指针:char*constp;//指针不可改,也就说指针只能指向一个地址,不能更改为其他地址charconst*p;//所指内容不可改,也就是说*p是常量字符串charconst*constp;//内容和指针都不能改constchar*constp;//同上...内容和指针不能改额...别晕,别晕....其实方法很简单...你别真死记硬背...其实可以以*为分界
3、符,在*左边有const就说明内容不能改,在*右边就说明指针不能改,而左边的char和const顺序是不要紧的...呵呵...你也可以理解成const是修饰后面的,正常顺序应该这样:constchar*constp;是不是看起来简单了?2.忽悠人的陷阱,str[]和*str的区别先告诉你哦,下面的题目可是陷阱啊....说说程序结果...charstr1[]=“abc”;charstr2[]=“abc”;constcharstr3[]=“abc”;constcharstr4[]=“abc”;constchar*str5=“
4、abc”;constchar*str6=“abc”;char*str7=“abc”;char*str8=“abc”;cout<<(str1==str2)<<endl;cout<<(str3==str4)<<endl;cout<<(str5==str6)<<endl;cout<<(str7==str8)<<endl;怎么样?都输出true?那显然你中标了...而且cout输出bool值的时候,就算全是真也应该都输出1啊...4个
5、1?那也不对...答案是0011,不信你试试...为什么呢?其实都说了这题是个大陷阱,因为这题根本不是比较字符串内容!而是比较字符串的地址.哦...恍然大悟...那为什么前两个是假呢?因为这可是说是一个深拷贝/浅拷贝的问题.当字符串是数组形式声明并初始化,编译器认为是新数组,分配新空间,但不是深拷贝,因为根本就不算拷贝.而如果是相同的字符串,用指针声明,那就是比较如果有一样的字符串,就直接把新指针指过去,这是正宗的浅拷贝.哇哈...你就中计了...1.str[]用sizeof判断会出错么?应该说我们常常用指针有很多时候是
6、解决字符串的问题,一般我们用strlen,这当然没有问题,但是要你编一个呢?看看下面这个MyStrlen有问题么?intMyStrlen(charstr[]){return(int)(sizeof(str)-1);}呵呵...咱们上当过一次..这个当然也是不对的...不错...这个函数是错的...为什么呢?首先,可以告诉你,无论何时,返回的总是3...额...是不是很奇怪,为什么不是数组长度呢?str不是char数组指针么?不错...确实是数组的指针,但是,当用函数传递的数组指针的时候就自动退化为指针了,而指针的长度是4
7、,你减去1了自然就是3了.但是如果按照下面代码就可以得到正常的值.charstr[]="helloworld";intlen=sizeof(str)-1;//记得减1哦,最后有'