指针面试题详解

文章目录

      • 指针笔试题解析
        • 笔试题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则是数组的最后一个元素地址,解引用就是5
    return 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进制打印的,结果是0x00100014
    printf("%p\n", (unsigned long)p + 0x1);
    //把p强制转换成(unsigned long),无符号长整型p+1就是0x00100001
    printf("%p\n", (unsigned int*)p + 0x1);
    //p被强制转换成(unsigned int*),p就是无符号整型指针,整型指针p+1就是跳过了4个字节,则结果是0x100004
    return 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]); //1
     return 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 把这个值当成地址打印
    //0xfffffc
    return 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  5
    return 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+2
     printf("%s\n", *--*++cpp+3); //ER
     //++优先级高于+,*(++cpp),cpp指向c+1,*__(c+1) -> *(c)+3 -> ER
     printf("%s\n", *cpp[-2]+3); //ST
     //*cpp[-1]+3 -> *(*cpp-2)+3 -> *(c+3)+3 -> ST
     printf("%s\n", cpp[-1][-1]+1); //EW
     //cpp[-1][-1]+1 -> *(*cpp-1)+1 -> *(c-1)+1 -> c[1]+1 -> EW
     return 0;
}

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

总结

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习Vue配置代理总结

今天学习了Vue的配置代理&#xff0c;当我们想要向服务器取回来数据时就先要向服务器发送请求&#xff0c;但前端发送请求的方式也有很多种&#xff0c;首先是发送请求的鼻祖JS的XMLHttpRequest&#xff08;xhr&#xff09;&#xff0c;它操作起来相对麻烦&#xff0c;开发中也…

基于STM32的CMT液晶屏控制器驱动程序设计与优化

本文以STM32微控制器为基础&#xff0c;设计并优化了一个用于控制CMT液晶屏的驱动程序。在设计过程中&#xff0c;我们首先介绍了液晶屏的基本工作原理&#xff0c;包括CMT液晶屏的结构和信号传输机制。然后&#xff0c;我们详细讨论了STM32微控制器的GPIO、SPI和DMA模块的特性…

基于RTOS(实时操作系统)的CMT液晶屏控制器驱动程序开发与实现

RTOS&#xff08;实时操作系统&#xff09;提供了一种有效的方式来管理和调度多任务系统&#xff0c;对于液晶屏控制器的驱动程序开发来说&#xff0c;RTOS能够提供良好的实时性和可靠性。本文以RTOS为基础&#xff0c;设计并实现了一个用于控制CMT液晶屏的驱动程序。在设计过程…

微信小程序-----WXML模板语法之数据绑定与事件绑定

目录 前言 一、数据绑定 1.Mustache语法 2.Mustache 语法的应用场景 &#xff08;1&#xff09;绑定内容 &#xff08;2&#xff09;绑定属性 &#xff08;3&#xff09;运算&#xff08;三元运算、算术运算等) 二、事件绑定 1.事件 &#xff08;1&#xff09;什么是…

Java安装(可多版本共存)及IIntelliJ IDEA环境搭建汉化(保姆级教程!)

编程如画&#xff0c;我是panda&#xff01; 这次给大家出一期JAVA安装以及IIntelliJ IDEA的安装教程 IIntelliJ IDEA分为社区版和专业版&#xff0c;两版的教程都有&#xff0c;小伙伴们根据需要自行选择使用 并且我会讲解一台计算机中多个版本JAVA JDK配置安装 前言 我最早接…

尼科彻斯定理----C语言

大家好我是Beilef许久未见了&#xff0c;小弟学校考试刚结束。这个过程懂的都懂。痛------ 文章目录 目录 文章目录 前言(一不好懂可以直接跳到二&#xff09; 一、尼科彻斯定理是什么&#xff1f; 二、尼科彻斯定理解析 这是ai的回答 尼科彻斯定理&#xff08;Nikomačs theor…

Django项目中的默认文件都有什么用

manager.py&#xff1a; 是django用于管理本项目的命令行工具&#xff0c;之后进行站点运行&#xff0c;数据库自动生成等都是通过本文件完成。 djangoStudy/__init__.py&#xff1a; 告诉python该目录是一个python包&#xff0c;暂无内容&#xff0c;后期一些工具的初始化可…

SPI通信讲解

了解SPI通信对于我们了解通信有非常重要的意义。 SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司&#xff08;摩托罗拉&#xff09;开发的一种通用数据总线 四根通信线&#xff1a; SCK&#xff08;Serial Clock&#xff09;&#xff1a;时钟线&a…

PHP反序列化总结4--原生类总结

原生类的简要介绍以及原生类和反序列化的关系 PHP 原生类指的是 PHP 内置的类&#xff0c;它们可以直接在 PHP 代码中使用且无需安装或导入任何库&#xff0c;相当于代码中的内置方法例如echo &#xff0c;print等等可以直接调用&#xff0c;但是原生类就是可以就直接php中直接…

【存储过程和存储函数】MySQL

存储过程和存储函数 一、实验目的 掌握通过SQL语句CREATE PROCEDURE创建存储过程的方法。 掌握使用SQL语句CALL调用存储过程的方法。 掌握使用SQL语句ALTER PROCEDURE修改存储过程的方法。 掌握使用SQL语句DROP PROCEDURE删除存储过程的方法。 掌握使用CREATE FUNCTION创建…

【ESP32接入语言大模型之智谱清言】

1. 智谱清言 讲解视频&#xff1a; 随着人工智能技术的不断发展&#xff0c;自然语言处理领域也得到了广泛的关注和应用。智谱清言作为千亿参数对话模型 基于ChatGLM2模型开发&#xff0c;支持多轮对话&#xff0c;具备内容创作、信息归纳总结等能力。可以快速注册体验中国版…

机器学习 | 无监督聚类K-means和混合高斯模型

机器学习 | 无监督聚类K-means和混合高斯模型 1. 实验目的 实现一个K-means算法和混合高斯模型&#xff0c;并用EM算法估计模型中的参数。 2. 实验内容 用高斯分布产生 k k k个高斯分布的数据&#xff08;不同均值和方差&#xff09;&#xff08;其中参数自己设定&#xff…

第十三讲 单片机驱动彩色液晶屏 bin档的烧录方法

单片机驱动TFT彩色液晶屏系列讲座 目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控…

解锁 JavaScript 数组的强大功能:常用方法和属性详解(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

摆脱油光和黑头,先敷15分钟的亚马逊白泥面膜吧

寒冷干燥的冬季&#xff0c;是皮肤最容易出现问题的时候&#xff0c;像是油性皮肤就更容易出油&#xff0c;另外黑头之类的问题也会变得更加常见。因此&#xff0c;在这个季节里&#xff0c;我们需要特别注意保护皮肤&#xff0c;多多补水保湿&#xff0c;同时深入清洁毛孔是非…

SpringCloud.03.网关Gateway

目录 网关Gateway的概念&#xff1a; 准备 使用 方式一 因为配置了网关所以可以直接通过gateway发送请求 方式二 修改配置前&#xff1a;http://localhost:8082/provider/run 方式三(动态路由) 导入配置类 网关Gateway的概念&#xff1a; Spring Cloud Gateway 是 Spri…

分布形态的度量_峰度系数的探讨

集中趋势和离散程度是数据分布的两个重要特征,但要全面了解数据分布的特点&#xff0c;还应掌握数据分布的形态。 描述数据分布形态的度量有偏度系数和峰度系数, 其中偏度系数描述数据的对称性,峰度系数描述与正态分布的偏离程度。 峰度系数反映分布峰的尖峭程度的重要指标. 当…

失踪人员信息发布与管理系统:计算机毕设课题的研究与实践 springboot+java+vue+mysql

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

认知觉醒(九)

认知觉醒(九) 专注力——情绪和智慧的交叉地带 第一节 情绪专注&#xff1a;一招提振你的注意力 用元认知来观察自己的注意力是一件很有意思的事情&#xff0c;相信你可以轻易观察到这种现象&#xff1a;身体做着A&#xff0c;脑子却想着B。 跑步的时候&#xff0c;手脚在…

力扣日记1.14-【二叉树篇】108. 将有序数组转换为二叉搜索树

力扣日记&#xff1a;【二叉树篇】108. 将有序数组转换为二叉搜索树 日期&#xff1a;2023.1.14 参考&#xff1a;代码随想录、力扣 108. 将有序数组转换为二叉搜索树 题目描述 难度&#xff1a;简单 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;…