指针面试题详解

文章目录

      • 指针笔试题解析
        • 笔试题1
        • 笔试题2
        • 笔试题3
        • 笔试题4
        • 笔试题5
        • 笔试题6
        • 笔试题7
        • 笔试题8
      • 总结

指针笔试题解析

数组名是首元素地址,两种情况除外:
1.sizeof(数组名) , 这是这是计算整个数组的大小,单位是字节;
2.&数组名 , 得出的是整个数组的地址;

笔试题1
#include<stdio.h>
int main()
{int a[5] = { 1, 2, 3, 4, 5 };int* ptr = (int*)(&a + 1);printf("%d,%d", *(a + 1), *(ptr - 1)); //2  5//*(a+1),a是首元素地址,+1就是第二个元素的地址解引用就是2//&a+1跳过的是整个数组,指向的是整个数组后的地址//*(ptr-1),指向的是整个数组后的地址,-1则是数组的最后一个元素地址,解引用就是5return 0;
}

在这里插入图片描述

笔试题2
#include<stdio.h>struct Test
{int Num;char* pcName;short sDate;char cha[2];short sBa[4];
}*p;
//假设p 的值为0x100000。 如下表表达式的值分别为多少?
//已知,结构体Test类型的变量大小是20个字节
int main()
{printf("%p\n", p + 0x1);//p的类型是struct Test,所以结构体指针p+1跳过的是整个结构体的大小(20),%p是以16进制打印的,结果是0x00100014printf("%p\n", (unsigned long)p + 0x1);//把p强制转换成(unsigned long),无符号长整型p+1就是0x00100001printf("%p\n", (unsigned int*)p + 0x1);//p被强制转换成(unsigned int*),p就是无符号整型指针,整型指针p+1就是跳过了4个字节,则结果是0x100004return 0;
}
笔试题3
int main()
{int a[4] = { 1, 2, 3, 4 };int *ptr1 = (int *)(&a + 1); //&a是整个数组的地址,&a+1跳过整个数组int *ptr2 = (int *)((int)a + 1);printf("%x,%x", ptr1[-1], *ptr2); 4  0x020000//ptr[-1] -> (ptr-1),指针-1,后移4字节,指向第4个元素//a是首元素地址,地址强转为int类型,int(a)+1又强转为int*类型,结果是a向后+1字节,然后以十六进制打印一个int元素return 0;
}

在这里插入图片描述

笔试题4
#include <stdio.h>
int main()
{int a[3][2] = { (0, 1), (2, 3), (4, 5) };int *p;p = a[0]; //a[0][0]printf( "%d", p[0]); //1return 0;
}

逗号表达式的结果是最后一个表达式的值;
数组实际存的是:a[3][2] = {1,3,5};
a[0]代表第一行第一个元素的地址,p[0] -> *(p+0) -> *p, 此时p[0]就是1

笔试题5
int main()
{int a[5][5];//p的类型:int (*)[4]//a的类型:int (*)[5]int(*p)[4];p = a;printf( "%p,%d\n", &p[4][2] - &a[4][2], //0xfffffc&p[4][2] - &a[4][2]); //-4//10000000 00000000 00000000 00000100  -4//11111111 11111111 11111111 11111011  //11111111 11111111 11111111 11111100 把这个值当成地址打印//0xfffffcreturn 0;
}

在这里插入图片描述

笔试题6
int main()
{int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int *ptr1 = (int *)(&aa + 1);//&aa是整个数组的地址,&aa+1跳过整个数组,ptr指向数组最后一个元素的后面int *ptr2 = (int *)(*(aa + 1));//aa是首元素地址,也就是aa[0]第一行的地址,aa+1,指向第二行的地址aa[1]printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1)); //10  5return 0;
}

在这里插入图片描述

笔试题7
#include <stdio.h>
int main()
{char *a[] = {"work","at","alibaba"};char**pa = a;pa++;printf("%s\n", *pa);return 0;
}

a是指针数组:存放char*类型的数组,数组有3个元素;
pa指向的是首元素地址,pa+1指向第二个元素at
在这里插入图片描述

笔试题8
int main()
{char *c[] = {"ENTER","NEW","POINT","FIRST"};char**cp[] = {c+3,c+2,c+1,c};char***cpp = cp;printf("%s\n", **++cpp); //POINT//cpp最开始指向c+3,*(++cpp)指向下一个元素:c+2printf("%s\n", *--*++cpp+3); //ER//++优先级高于+,*(++cpp),cpp指向c+1,*__(c+1) -> *(c)+3 -> ERprintf("%s\n", *cpp[-2]+3); //ST//*cpp[-1]+3 -> *(*cpp-2)+3 -> *(c+3)+3 -> STprintf("%s\n", cpp[-1][-1]+1); //EW//cpp[-1][-1]+1 -> *(*cpp-1)+1 -> *(c-1)+1 -> c[1]+1 -> EWreturn 0;
}

注意:++和–会改变指针本身的指向
在这里插入图片描述

总结

1.数组名是首元素地址,两种情况除外:
①sizeof(数组名) , 这是这是计算整个数组的大小,单位是字节;
②&数组名 , 得出的是整个数组的地址;

2.++和–会改变指针本身的指向;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/623150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Error: Cannot find module ‘vue-template-compiler‘ 问题解决

启动Vuepress项目时报了如下错误&#xff1a;Error: Cannot find module vue-template-compiler Error: Cannot find module vue-template-compiler Require stack: - /usr/local/lib/node_modules/vuepress/node_modules/vue-loader/lib/compiler.js - /usr/local/lib/node_…

4bit/8bit 启动 Mixtral 8*7B 大语言模型

4bit/8bit 启动 Mixtral 8*7B 大语言模型 0. 背景1. 修改代码 0. 背景 个人电脑配置实在难以以 float16 运行 Mixtral 8*7B 大语言模型&#xff0c;所以参数 4bit 或者 8bit 来启动。 实际测试结果&#xff0c;4bit 时推理速度明显变快了&#xff0c;8bit 时推理也非常慢。 …

代码随想录day16

104.二叉树的最大深度 题目&#xff1a;给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例&#xff1a; 给定二叉树 [3,9,20,null,null,15,7]&#xff0c; 做这道题之前需要先…

vim复制剪切删除

在 Vim 中&#xff0c;复制操作可以通过以下方式进行&#xff1a; 复制一行&#xff1a;在命令模式下&#xff0c;将光标移动到要复制的行&#xff0c;然后按 yy 进行复制。例如&#xff1a;yy复制某几个字&#xff1a;在命令模式下&#xff0c;按 v 进入可视模式&#xff0c;…

Jenkins-执行脚本案例-初步认识JenKins的使用

环境搭建 docker pull jenkins/jenkins:2.440 docker run -d -p 10240:8080 -p 10241:50000 -v /env/liyong/data/docker/jenkins_mount:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins jenkins/jenkins:2.440 #在挂载的目录下去修改仓库地址 vim hudson…

vulhub中的Nginx漏洞的详细解析

Nginx漏洞 1.cd到nginx_parsing_vulnerability cd /opt/vulhub/nginx/nginx_parsing_vulnerability 2.执行docker-compose up -d 3.查看靶场是否开启成功 dooker ps 4.访问浏览器 因为这里是80端口所以直接使用ip就能访问成功 5.上传图片 注意这里的图片是含有一句话木马的图…

【Vue3】2-13 : 章节总结

本书目录&#xff1a;点击进入 一、总结内容 二、习题 2.1 【选择题】以下Vue指令中&#xff0c;哪些指令具备简写方式&#xff1f; 2.2 【编程题】以下Vue指令中&#xff0c;哪些指令具备简写方式&#xff1f; &#xff1e; 效果 &#xff1e; 代码 一、总结内容 了解核…

3、Linux中合并两个文件

目录 使用 cat 命令 使用 tail 或 head 命令 使用 cat 命令 cat file1.txt file2.txt > merged_file.txt 这个命令会将 file1.txt 和 file2.txt 的内容按顺序合并&#xff0c;并将合并后的内容重定向到 merged_file.txt。 cat file2.txt >> file1.txt 这会将 fil…

1116: 删除元素(数组)

题目描述 输入一个递增有序的整型数组A有n个元素&#xff0c;删除下标为i的元素&#xff0c;使其仍保持连续有序。注意&#xff0c;有效下标从0开始。 定义如下两个函数分别实现删除元素操作和数组输出操作。 void del(int a[], int n, int i); /*删除数组a中下标为i的元素*…

分布式计算平台 Hadoop 简介

Hadoop简介 Hadoop是一种分析和处理大数据的软件平台&#xff0c;是一个用Java语言实现的Apache的开源软件框架&#xff0c;在大量计算机组成的集群中实现了对海量数据的分布式计算。其主要采用MapReduce分布式计算框架&#xff0c;包括根据GFS原理开发的分布式文件系统HDFS、…

鸿蒙App开发-网络请求-下拉刷新三方库-底部Tab栏-滚动组件(含源码)

本文介绍一个基于鸿蒙ArkTS开发的App&#xff0c;是一个包含轮播图、文章列表和 Web 页面等功能的多页面应用。 本文主要内容包括&#xff1a; 一、效果图 首页 详情页 二、内容简介 1.底部Tab栏和两个页面 App底部是一个TabBar&#xff0c;点击TabBar可以切换上面的页面。共…

半监督学习 - 半监督支持向量机(Semi-Supervised Support Vector Machines)

什么是机器学习 半监督支持向量机&#xff08;Semi-Supervised Support Vector Machines&#xff0c;S3VM&#xff09;是支持向量机&#xff08;SVM&#xff09;的一种扩展&#xff0c;旨在处理训练数据中只有少量样本被标记的情况。与传统的监督SVM不同&#xff0c;S3VM通过结…

FFmpeg解决视频播放加载卡顿问题(FFmpeg+M3U8分片)

FFmpeg解决视频播放加载卡顿问题(FFmpegM3U8分片) 在这静谧的时光里&#xff0c;我们能够更清晰地审视自己&#xff0c;思考未来的方向。每一步的坚实&#xff0c;都是对勇气的拥抱&#xff0c;每一个夜晚的努力&#xff0c;都是对未来的信仰。不要害怕独行&#xff0c;因为正是…

spring boot application yaml key下划线如何转java的Properties对象字段驼峰

spring boot yaml key和value如何映射到Properties对象 下面以MybatisPlusProperties为例 ##java properties 字段驼峰 ##yaml文件如图&#xff0c;key使用下划线 ##java对象驼峰转下划线匹配yaml文件key DataObjectPropertyName.toDashedForm(name);//驼峰转下划线 ##设置P…

开发er们必知的Git命令

Git和GitHub是每位软件工程师都必须了解的最基本的东西。这些工具是开发人员日常工作的组成部分,因为我们每天都要与它们进行交互。熟练掌握Git不仅能简化您的生活,还能显著提高生产力。在这篇博文中,我们将探索一组命令,这些命令将大大提高您的生产力。随着您对这些命令的掌握…

Codeforces Round 779 (Div. 2) D2. 388535(思维题 二进制性质/trie树上最大最小异或)

题目 t(t<1e5)组样例&#xff0c;每次给定l,r(0<l<r<2^17) 和r-l1个数ai&#xff0c;新序列是被[l,r]这些数异或上同一个x得到的&#xff0c; 求出x&#xff0c;有多个输出任意一个即可 思路来源 官方题解 洛谷题解 Educational Codeforces Round 157 (Rated…

Linux系统使用超详细(十)~vi/vim命令①

vi/vim命令有很多&#xff0c;其实只有少数的用法对于我们日常工作中起到了很大帮助&#xff0c;但是既然我选择梳理Linux的学习笔记&#xff0c;那么一定全力把自己的理解和学习笔记的内容认真整理汇总&#xff0c;内容或许有错误&#xff0c;还请发现的C友们发现了及时指出。…

swift对接环信sdk

准备 熟练objective-c语言 有一台mac电脑,并安装了xcode 和 cocoapods 内容篇幅较长,需要内心平和耐心看下去,务必戒躁. 学习目的 手把手教大家如何在iOS应用中集成环信IM 明确表示,内容一定全面,没有任何丢失,只要沉得住气,耐得下心,3小时即可搞定. 若经常阅读文档以及语…

如何写好技术博客

文章目录 1. 目的2. 实施方法3. 论文结构3.1 摘要写法3.2 背景写法3.3 正文写法3.4 结论写法 4. 期望5.参考文献 1. 目的 读书和工作以来&#xff0c;发现我存在一个问题&#xff1a;很多东西无法用自己的语言来描述&#xff0c;导致沟通容易出现问题。咨询了身边的一些同事和…