我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言指针笔试题全面解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言指针笔试题全面解析

前言

通过8道指针笔试题的解析,可以充分的复习到指针的相关知识,并且题目中会结合许多之前的相关知识,希望通过本篇文章,对大家所学的知识进行一个复习。

提示:以下是本篇文章正文内容,下面案例可供参考

一、指针笔试题 

1.题目如图:

 

逐条语句分析:

①.定义了一个大小为5的整型数组,并进行了初始化

②.定义了一个整型指针变量ptr用来存放地址,这里的存放地址是(&a+1)的地址,由于是&a,所以表示的是整个数组a,所以&a+1跳过的是整个数组,这里的地址是a数组后面的一块随机变量地址。因为指针指向的是整个数组,所以它的类型是int(*)[5](数组指针),所以我们在它的前面进行强制类型转换,把它转换为(int*)类型,然后再存放到指针变量ptr内部。

③.打印出来对应的*(a+1)和*(ptr-1)的数值

图解:

 

 运行结果:

  

2.题目如图:

 

逐条语句分析:

①.定义一个结构体变量,供我们一会使用

②.p是一个地址,没有对它进行任何的改变,所以就是用16进制去进行加减操作即可,0x1就是十六进制的1,所以可以理解为p+1,打印出来对应的十六进制的地址,因为结构体的大小为20个字节,所以+1就是跳过整个结构体,就是加上整个结构体的大小,即对应的p的地址+20得到新的地址打印出来,这里加上的20是十进制我们需要把它转换为十六进制的数,即对应p的地址加上0x00000014即可

③.p在这里进行了一步无符号长整型的强制类型转换,然后再加上0x1(即十进制的1),我们想既然我们把p类型转换为了一个整型,所以+1就是单纯的+1,我们举一个简单的例子,10和1都是整型数据,10在内存的存储是0x0000000A,1在内存的存储是0x00000001,10+1 = 11 ,11对应的内存存储是0x0000000B,所以我们知道了两个整型相加,对应的地址就是+1

④.p在这里进行了一步无符号整型指针的强制类型转换,然后再加上0x1(即十进制的1),我们想既然我们把p类型转换为一个整型指针,所以加+1,跳过的是一个整型指针变量,一个整型指针变量的大小为4,所以+1对应的地址就是+4

 运行结果:

 3.题目如图:

 

逐条语句分析:

①.定义一个大小为4的整型数组,并且进行了初始化

②.定义一个整型指针变量ptr1存放的是变量的地址,这个地址与第一题的方法一致在这里不再重复,向上看第一题即可

③.这里的a单独放在括号内,代表的是数组的首元素地址,类型是(int*),在a的前面有一步强制类型转换把int*类型转换为了整型(int类型)加+1后,我们由上一题可以知道整型的数值+1地址也是+1个字节,然后再一步强制类型转换把它转换为int*的类型,把地址存储到指针变量ptr2中

④.注意这里的是%x是以十六进制的方法打印出来ptr[-1]和*ptr2

图解:

运行结果:

4.题目如图:  

 

 逐条语句分析:

①.定义了一个3行2列的二维数组,并且进行了初始化,我们看到这里面的元素,都是用圆括号括起来的,所以这里的是逗号表达式,我们知道逗号表达式的数值是取最后一个元素,所以就相当于我们的数组元素只有{1,3,5}其他的的位置没有初始化数值就都是0,所以就相当于我们的数组就是这样的int a[3][2] = {1,3,5,0,0,0}

②.定义一个指针变量p

③.指针变量p用来存放a[0]的地址,我们注意到这里的a[0],既没有&a[0]也没有sizeof(a[0]),所以这里的a[0]就是数组的首元素地址就是a[0][0]的地址,即就是数字1的地址,所以指针变量p存放的就是a[0][0]元素的地址

④.打印出来p[0]对应的元素数值,我们知道p[0] = *(p+0)所以就是对应a[0][0]的数值

图解:

运行结果:

 5.题目如图:

逐条语句分析:

①.定义一个二维数组。

②.定义一个数组指针。

③.将二维数组首地址赋值给数组指针,我们看到这里的类型是int(*)[4],而二维数组明显是有5列的所以明显这个数组指针不能存储整个二维数组,只能存储一部分。

④.打印出来地址的差值对应的地址,以及对应的差值数值。

图解:

  

运行结果:

6.题目如图:

逐条语句分析:

①.定义一个二维数组并进行初始化

②.定义一个指针变量ptr1存放的是变量的地址,我们看到这里的数组名是被&的,我们知道&数组名是表示的整个数组,所以&aa+1跳过的是整个数组,因为这里指向的是整个数组对应的类型就是int (*)[5],所以我们需要进行一步强制类型转换,把它转换为(int*)类型存储到指针类型变量ptr2中

③.这里的aa没有&符号,也没有在sizeof内部,所以这里的aa是首元素地址,因为是一个二维数组,所以首元素地址是第一行的地址,+1后跳到了第二行

④.打印出来*(ptr1-1)和*(ptr2-1)的数值

图解:

运行结果:


7.题目如图:

逐条语句分析:

①.定义一个字符指针数组,并进行了初始化

②.定义一个二级指针存放的是字符指针数组元素的首地址

③.二级指针++跳个一个元素的地址,指向的是下一个元素的地址

④.打印出来*pa对应的元素

图解:

 运行结果:

 8.题目如图:

 逐条语句分析:

①.定义一个字符指针数组,并初始化

②.定义一个字符指针数组(二级指针),并初始化

③.定义一个三级指针指向cp字符指针数组

④~⑦按要求去打印数值

图解:

运行结果:

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言指针笔试题全面解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言常见的指针笔试题解析

在我们学习指针之后,应该在实际应用中去理解和掌握它,毕竟实践才是检验真理的唯一标准,我们以后在找工作的过程中免不了会遇到与指针相关的试题,本篇文章可以帮助我们提前了解一些常见的指针考点,需要的可以了解一下
2022-11-13

C语言利用面试真题理解指针的使用

C语言这门课程在计算机的基础教学中一直占有比较重要的地位,然而要想突破C语言的学习,对指针的掌握是非常重要的,本文将具体针对指针的基础做详尽的介绍
2022-11-13

C语言的指针类型详细解析

C语言的指针类型包括两方面的信息:一是地址,存放在指针变量中;二是类型信息,关乎于读写的长度,没有存储在指针变量中,位于用该指针读写时的mov指令中,不同的读写长度对应的mov指令不同
2022-11-15

解析Go语言和C语言指针的特性及应用

Go语言和C语言是两种非常常见的编程语言,它们都支持指针的概念,但在使用方式和语法上有一些不同。本文将对Go语言和C语言的指针特性进行详细解析,并通过具体的代码示例来说明其应用。一、指针的定义和基本概念在C语言中,指针是一种特殊的数据类
解析Go语言和C语言指针的特性及应用
2024-03-07

解析C语言中指针的作用和技巧

C语言指针解析:指针的作用和使用技巧引言:在C语言中,指针是一种非常重要的概念和特性。它使得程序能够动态地管理内存和数据,提高了程序的灵活性和效率。本文将深入探讨指针的作用和使用技巧,并通过具体的代码示例来加深理解。一、指针的概念和作用
解析C语言中指针的作用和技巧
2024-02-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录