前言
基础好的可以直接从后往前查看,基础稍微差一些的可以从前往后逐一查看。文末有投票,大家可以将自己的评估结果以投票方式记录下来,也可以查看一下比人都是什么级别!另,如各位朋友有需求解答的,可以评论留言,后续小编会写文章对这些题进行详细解答。
指针做为C/C++的灵魂,广大C/C++从业者对其是又爱又恨。爱的是指针的强大,恨的是一不小心就不给你挖坑。作为C/C++爱好者的你,对指针的掌握度如何?小编就自身所学,将指针难度分为十级。有兴趣的朋友可以进来参考一下(水平有限,请轻喷);
![ec3da54c87d5e563c5d3476cfd08f417.png](https://img-blog.csdnimg.cn/img_convert/ec3da54c87d5e563c5d3476cfd08f417.png)
LEVEL1--黑铁
最基本的指针概念,包括指针申明和指针赋值问题;
int a = 100 ;int b = 200 ;int c = 300 ;int* p = &a ;cout<
题目:请问上面三行输出的代码分别会输出什么?本题主要考察指针基本概念和指针两种赋值方式的区别;
参考答案:
p:002AFEC8 *p100p:002AFEBC *p200p:002AFEBC *p300 b:300
LEVEL2--青铜
指针的深入理解,理解取址运算符(“&”)和解引用运算符(*)
int a = 100 ;cout<
题目:请问以上各行输出代码会分别输出什么?*&s.i和(*&s).i以及*&s.p和(*&s).p有什么区别?
运行结果:
&a:0022FEF8 *&a:100&a:0022FEF8 *&a:200 a:200&s.i:0022FEE8 *&s.i:300 &s.p(*&s).i:300 (*&s).p:0022FEF8
LEVEL3--白银
指针和内存相关,初级入门知识。
int* p = (int*)malloc(sizeof(int)*10) ;free(p) ;char* c1 = new char[10];for (int i = 0; i < 10; i++)c1[i] = 'A' ; free(c1); char* c2 = "AAAAAAAAAA" ; free(c2) ;
题目:请问上述代码有几处错误?
答案是两处:free(c1);和free(c2) ;但是这两处的错误原因是完全不同的。
LEVEL4--黄金
考察指针作为函数参数和返回值的用法和注意事项;
题目:请问下述代码将输出什么结果?
int* func(int* x){*x = *x/10 ;int a = *x ;int* p = &a ;return p ;}int main(){int a = 100 ;int* p = &a;int* result = func(p);cout<
参考答案:
101529988064//访问内存出错
LEVEL5--铂金
考察指针与一维数组的关系,指针与数组的关系本身原理上也是指针与内存之间的关系;
题目:利用指针遍历维数组(用三种方式),本题目主要考核一维数组与指针的关系以及指针偏移在内存中的操作。
int arr[] = {0,1,2,3,4,5} ;int* pArr = nullptr ;pArr = arr;//或者 pArr = &arr[0] ;
参考答案:
for (int i = 0; i < 6; i++){cout<
LEVEL6--钻石
二维数组与指针的关系,在一维数组的基础上增加了难度。
题目:请用指针遍历输出一个二维数组。本题考点为指针偏移和二维数组在内存中的连续存储方式,以及如何将二维数组拆分成多个一维数组;
参考答案:
int arr[3][5] = {01,02,03,04,05,11,12,13,14,15,21,22,23,24,25} ;int* p = nullptr ;for (p = arr[0]; p < arr[0]+15; p++){cout<
附加一个题:如下图,利用指针回行遍历二维数组,按值为1~20的顺序输出数组元素;
![3a6470a8ad1d93943db8caf6a525eaeb.png](https://img-blog.csdnimg.cn/img_convert/3a6470a8ad1d93943db8caf6a525eaeb.png)
LEVEL7--星耀
当对象存在指针成员时,对象的深浅拷贝有何区别?
题目:请问如下代码最终将会输出什么?考察对深浅拷贝的理解;
class MyClass{public:MyClass(int x,char * s){this->a = x;this->str = new char[20] ;strcpy(this->str,s);};~MyClass(){};int a ;char* str ;private:};int main(){ MyClass myClass1(10,"i love u"); MyClass myClass2 = myClass1 ;delete myClass1.str ;cout<
答案:最终输出的将是一堆乱码。
LEVEL8--大师
深入理解指针偏移原理。想要完成此题,不仅要对指针有深刻的了解还需要对计算机内存有一定的认识;
struct MyStruct{int a ;char s[10] ;char c ;char* str ;}*p;p = (MyStruct*)0x100000 ;cout<
参考答案:
0010001400100028
LEVEL9--王者
综合考察指针数组、多级指针、指针偏移、数据存储、内存访问等多方面知识;
题目:请问下述代码输出结果为何?
char* s[] = {"11","22","33","44"} ;char** sp[] = {s+3,s+2,s+1,s} ;char*** spp = sp ;cout<
参考答案:
442243
LEVEL10--荣耀王者
二维数组与指针
题目:下述代码将输出什么结果?
int a[5][5] ;int(*p)[4] ;p = (int(*)[4])a ;cout<
参考答案:-4 ;
C/C++段位投票统计