网上收集的c/c++的笔试题,将部分整理成节,上传后大家方便。不是很全,但是可以作为笔试的参考吧。
p[1] p1[0][1],如何验证那,只要执行if(p[1] = = p1[0][1]),如果这个逻辑为真,那说明正确。 上次题目的内容为: 1、 有一个一维数组int a1[10],定义一个指针,指向一维数组名。 2、 有一个一维数组int a2[10],定义一个指针,指向一维数组名的地址。 3、 有一个二维数组int a3[3][4],定义一个指针,指向二维数组名。 4、 有一个二维数组int a4[3][4],定义一个指针,指向二维数组名的地址。
还记得前2道题的分析方法吗,第一个题,应该定义一个int *p的指针来指向一维数组a1(这个是比较简单的)。而第二个题目为定义int (*p)[10]来指向一维数组a2的地址。
我们这次先分析后面面两道题: int a3[3][4]为二维数组,大家都知道他的物理意义是3行4列,但是我们都知道,计算机的内存是一维空间,即不可能按照一个面的方式存储二维数组的,那么计算机怎么存储呢,大家可以参考下C语言教材,二维数组是按照从上到下从左到右的顺序放置到一维内存空间的。 比如int a3[3][4] = {{1,2,3,4},{5,6,7,8}},在计算机分配了8个int空间按顺序存储1,2,3,4,5,6,7,8,那计算机怎么知道1,2,3,4为第一行那,而不是1,2为一行,3,4为一行那。看来a3中的“[4]”起到了很重要的作用。 那么我们还是回到题目上,定义一个指针指向a3,那么我们就先看下a3是怎么读内存的?a3 和a3+1,我们分别用%p来查看下他们的地址偏移,程序大家可以自己写,我们会发现他们两者的差值为16,我们又知道a3里面存着都是4个字节的int类型,那么可以知道,从a3到a3+1偏移了4个int单位,而这个4恰好是第二个方括号的数字。 那么我们定义的指针P偏移内存的方式也应该是4个int单位才能和a3匹配,所以很多同学在面试时给出int **p的结果是不对的,因为二维指针的偏移还是4个字节为一个偏移单位,跟我们分析的不一样。那我们
如果去写一个指向4个int单位的指针那,大家可以考虑下使用小括号来帮助我们理解。
答案为:int (*p)[4]。看到这个答案,和我们的第二题的答案很类似,所以我们可以这样认为,一维数组名的地址实质就是一个二维数组的一行。 下面我们看第四题,有涉及到数组名的地址的问题,二维数组名的地址,根据我们上次分析,可以知道,二维数组名的地址偏移实际上是一个二维数组对象,即偏移一个面,那么对于指针的定义,应该容易的得到: int (*p)[3][4]; 这样的答案。 综合这几道题目,我们能更深入的理解关于指针的含义了。 c/c++经典面试题
面试题1:变量的声明和定义有什么区别 为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但是只在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。
说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。
面试题2:写出bool 、int、 float、指针变量与“零值”比较的if语句 bool型数据: if( flag ) { A; } else { B; } int型数据: if( 0 != flag ) { A; } else { B; }
指针型数: if( NULL == flag ) { A; } else { B; }
float型数据: if ( ( flag >= NORM ) && ( flag <= NORM ) ) { A; 2 } 注意:应特别注意在int、指针型变量和“零值”比较的时候,把“零值”放在左边,这样当把“==”误写成“=”时,编译器可以报错,否则这种逻辑错误不容易发现,并且可能导致很严重的后果。
面试题3:sizeof和strlen的区别
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库部分c、c++笔试题集锦(5)在线全文阅读。
相关推荐: