2026年广发银行信息科技岗CC语言基础内存管理指针操作校招笔试重点难点_第1页
2026年广发银行信息科技岗CC语言基础内存管理指针操作校招笔试重点难点_第2页
2026年广发银行信息科技岗CC语言基础内存管理指针操作校招笔试重点难点_第3页
2026年广发银行信息科技岗CC语言基础内存管理指针操作校招笔试重点难点_第4页
2026年广发银行信息科技岗CC语言基础内存管理指针操作校招笔试重点难点_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年广发银行信息科技岗C/C++语言基础(内存管理、指针操作)校招笔试重点难点一、选择题(每题2分,共10题)1.内存分配方式的理解在C语言中,使用`malloc`函数分配内存后,若未进行初始化,则该内存区域的初始值是()。A.0B.随机值C.未定义D.全12.指针与数组的关系以下代码段中,`printf`的输出结果是()。cintarr[5]={1,2,3,4,5};intptr=arr;printf("%d",(ptr+3));A.1B.2C.3D.43.指针运算若定义`inta=10,p=&a;`,执行`p++`后,`p`的值是()。A.11B.10C.0D.未定义4.动态内存释放以下代码段中,存在内存泄漏的是()。cvoidfunc(){intp=(int)malloc(sizeof(int));free(p);return;}A.无内存泄漏B.`p`未置NULL导致泄漏C.`malloc`未检查返回值D.`free`后`p`仍可访问5.指针与函数以下代码段中,`swap`函数的正确调用方式是()。cvoidswap(inta,intb){inttemp=a;a=b;b=temp;}A.`swap(a,b);`B.`swap(&a,&b);`C.`swap(a,b);`D.`swap(a,b);`二、填空题(每空2分,共10空)1.在C语言中,使用`free`函数释放内存后,对应的指针应赋值为________,以避免野指针。2.若定义`charstr="Hello";`,则`str`的类型是________,`str[0]`的值是________。3.以下代码段中,`sum`的最终值是________。cinta[3]={1,2,3};intp=a;intsum=0;while(p<a+3){sum+=p++;}4.若定义`intp=NULL;`,执行`p=10;`会导致________。5.在C++中,使用`new`分配内存后,应使用________关键字释放。6.以下代码段中,`arr[2]`的值是________。cintarr[5]={1,2,3,4,5};int(ptr)[5]=&arr;printf("%d",ptr[2][0]);7.若定义`inta=5;intp=&a;`,则`p-1`的值是________(假设`p`指向`a`的低地址)。8.在C语言中,`sizeof(int)`的值至少为________字节。9.以下代码段中,`ptr`的值是________。cinta=10;intptr=&a;ptr=ptr+1;10.若定义`charstr1="ABC";charstr2="DEF";`,执行`str1=str2;`后,`str1`指向的字符串是________。三、简答题(每题5分,共5题)1.内存泄漏的原因及解决方法简述内存泄漏的常见原因,并提出至少两种解决方法。2.指针与引用的区别在C++中,指针和引用有何区别?在哪些场景下优先使用引用?3.野指针的产生及避免方法什么是野指针?如何避免野指针的产生?4.堆栈内存的区别简述堆内存和栈内存的区别,并说明各自的适用场景。5.指针与二维数组的结合如何使用指针访问二维数组?请给出代码示例。四、编程题(每题15分,共2题)1.动态内存分配与释放编写一个C语言函数,实现动态分配一个包含`n`个整数的数组,并返回指向该数组的指针。若分配失败,返回`NULL`。调用该函数后,释放分配的内存。c//示例代码框架intcreate_array(intn){//实现动态分配}2.指针运算实现数组反转编写一个C语言函数,使用指针运算将一个整型数组原地反转。不使用额外的数组,仅通过指针交换元素。c//示例代码框架voidreverse_array(intarr,intn){//实现数组反转}答案与解析一、选择题1.C解析:`malloc`分配内存后,若未初始化,内存区域的值是未定义的。2.D解析:`ptr+3`指向`arr[3]`,即值为4。3.D解析:`p++`将`p`指向`a+1`,但`int`类型指针的加法结果未定义。4.B解析:`free`后未将`p`置NULL,可能导致野指针。5.A解析:函数参数为指针,直接传递变量地址即可。二、填空题1.`NULL`解析:释放内存后指针应置NULL,避免误操作。2.`char`,`'H'`解析:`str`是字符指针,`str[0]`指向第一个字符'H'。3.`6`解析:`sum`累加`1+2+3`。4.段错误(或未定义行为)解析:`NULL`指针无法解引用。5.`delete`(或`delete[]`)解析:`new`分配内存,`delete`释放。6.`3`解析:`ptr[2][0]`即`arr[2]`。7.负值(或未定义)解析:`p-1`相当于指针减去一个整数,结果未定义。8.`1`解析:C标准规定`int`至少占1字节。9.未定义(或无效地址)解析:`ptr+1`超出数组边界,结果未定义。10.`"DEF"`解析:`str1`被赋值为`str2`的地址,指向"DEF"。三、简答题1.内存泄漏的原因及解决方法-原因:1.动态内存未释放(如`malloc`后忘记`free`)。2.全局或静态变量在作用域内持续存在。3.错误的指针赋值(如将已释放内存的指针重新赋值)。-解决方法:1.使用智能指针(C++)或`free`确保释放。2.避免在循环中动态分配内存。2.指针与引用的区别-指针:可指向任意内存地址,可为`NULL`,支持解引用和指针运算。-引用:必须绑定对象,不可为`NULL`,不支持指针运算。-优先使用引用:函数参数传递、返回对象避免复制。3.野指针的产生及避免方法-产生原因:释放内存后未置NULL,或指针指向已释放区域。-避免方法:1.`free`后立即置NULL。2.使用智能指针(C++)。4.堆栈内存的区别-栈:自动分配释放,速度快,大小固定。适用于静态数组、局部变量。-堆:手动分配释放,速度慢,大小灵活。适用于动态数组、对象。5.指针与二维数组的结合cintarr[3][4]={1,2,3,4,5,6,7,8};int(ptr)[4]=arr;printf("%d\n",ptr[1][2]);//输出6解析:`ptr`指向整个数组,`ptr[i][j]`即`arr[i][j]`。四、编程题1.动态内存分配与释放cintcreate_array(intn){if(n<=0)returnNULL;intarr=(int)malloc(nsizeof(int));if(arr==NULL)returnNULL;returnarr;}调用示例:cintarray=create_array(5);if(array){//使用arrayfree(array);}2.指针运算实现数组反转cvoidreverse_array(intarr,intn){intleft=arr;intright=arr+n-1;while(left<ri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论