数组和指针 笔试题(3)

ff57a31d4d9c466c99f60278fd63a274.png

目录

11.笔试题11

12.笔试题12

13.笔试题13

14.笔试题14


11.笔试题11

	//笔试题11(难)int a[5][5];//创建25个int类//p[]1[]2[]3[]4[]5 []6[]7[]8[]9[]10 []11[]12[]13[]14[]15 []16(p[4])[][](p[4][2])[][] [][](a[4][2])[][][] [][][][][]int(*p)[4];//创建数组指针p = a;//初始化,p是二维数组第一行的地址printf("%p,%d", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);// *(*(p+4)+2),p是指针变量存放第一行的地址,p的类型是int (*)[4],所以p+1会跳过4个int,p+4就会跳过16个int//跳过16个int后指向的是二维数组第4行第2列的地址(也就是a[3][1]),因为p是二维数组的地址,所以*(p+4)拿到的还是这里的地址//此时拿到的地址类型是int*型,加2后跳过2个int字节,跳到a[3][3]的位置//地址-地址输出之间相差的个数,相差个数为4,打印应为-4//-4的原码为10000000000000000000000000000100//反码为11111111111111111111111111111011//补码为1111 1111 1111 1111 1111 1111 1111 1100//地址为补码16进制,输出地址应为FFFFFFFCreturn 0;

12.笔试题12

//笔试题12(难)
int aa[2][5] = { 1,2,3,4,5,6,7,8,9,10 };
//存放方式不同,直接全存到第一行了
//是&aa[1][2][3][4][5][6][7][8][9][10]&aa+1
//不是[1][2][3][4][5]  
//    [6][7][8][9][10]
int* ptr1 = (int*)(&aa + 1);
//取出整个数组的地址,+1跳过10个int类型,跳过了整个数组
int* ptr2 = (int*)(*(aa + 1));
//aa是首元素的地址,也就是第一行的地址,第一行的地址+1,也就是第一行首元素的位置开始跳过5个(int)类型,所以指向数字6的地址
//*(aa+1)为地址,因为是二维数组,等于拿到这里的地址,并不改变地址的类型
printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
//第一个是10,第二个ptr是指向6的地址,-1往前4个字节,也就是指向5return 0;

二维数组中,拿出某一行的地址后+1其实不是意义上的跳过一行,而是跳过 列数*sizeof(类型)个字节


13.笔试题13

#include<stdio.h>
int main()
{//笔试题13(难)char* arr[] = { "work","at","alibaba" };//数组指针,创建3个变量//[char*][char*][char*]char** pa = arr;//数组名表示首元素地址,所以是'w'地址的地址,也就是二级指针pa++;//二级指针++,跳过一个char*类型,跳到'a'的地址,此时pa是指向'a'的二级指针printf("%s\n", *pa);//pa是二级指针,解引用后为一级指针,指向'a'的地址//打印atreturn 0;
}                         

这里要注重二级指针与一级指针的关系

字符串只需要提供地址就可以,系统就会顺藤摸瓜到'\0',无所谓是二级指针还是三级指针还是一级指针


14.笔试题14

#include<stdio.h>
int main()
{//	笔试题14char* c[] = { "ENTER","NEW","POINT","FRIST" };//[char*(E的指针)][char*(N的指针)][char*(P的指针)][char*(F的指针)]//c是首元素的地址,是二级指针char** cp[] = { c + 3,c + 2,c + 1,c };//[char**(F的二级指针)][char**(P的二级指针)] [char**(N的二级指针)][char**(E)的二级指针]//c+1跳过一个char*类型//cp是三级指针char*** cpp =  cp ;//CP是数组首元素地址,是F的二级指针,cpp是三级指针存放的是F的三级指针//cpp+1跳过一个char**类型printf("%s\n", **++cpp);                                                                                                                                                                                                                                                                                     //cpp+1,跳过一个char**类型,从F的二级指针跳到P的二级指针,cpp存放P的三级指针//解引用后为二级指针,再次解引用为1级指针,也就是P的一级指针,打印POIINT//printf("%s\n", *-- * ++cpp + 3);//此时cpp为P的三级指针,++后跳过1个char**类型,跳到N的地址,解引用后为二级指针,//--表示减去一个char*类型,也就是跳到了E的地址,解引用后变为一级指针,+3跳过3个字节,跳到“ENTER”中E的地址//打印ER	printf("%s\n", *cpp[-2]+3);      //cpp此时是N的三级指针,cpp-2后表示跳过两个char**类型,跳到F的二级指针,cpp解引用后二级指针,再次解引用后为1级指针,+3表示跳过3个字节,打印STprintf("%s\n", cpp[-1][-1]+1);//因为上一步printf是cpp-2,所以cpp本身并未改变,还是指向N的三级指针//cpp此时还是N的指针,-1后表示跳过1个char**类型,指向P的二级指针,解引用后为P的二级指针,再-1表示跳过1个char*类型,跳过后指向N的地址//解引用后为一级指针,+1表示跳过1个char类型,也就是指向E的地址,打印EW
}               

P的三级指针指向的是P的二级指针,P的二级指针指向的是P的一级指针

相同变量的 n级指针同理

三级指针+1后跳过1个char**类型,那当这个三级指针解引用后指向的就是跳过1个char**类型的地址

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

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

相关文章

小型防爆气象站是什么

在易燃易爆、危险系数高的工业环境中&#xff0c;小型防爆气象站犹如一位忠诚的安全守护者&#xff0c;默默守护着生产现场和人员的安全。它以其独特的防爆特性、精准的监测能力以及智能化的管理手段&#xff0c;成为了这些环境中不可或缺的安全屏障。 小型防爆气象站的核心优势…

量化交易面试:什么是Black-Scholes方程?

Black-Scholes方程是金融数学中的一个重要方程&#xff0c;用于计算欧式期权的理论价格。它由Fischer Black、Myron Scholes和Robert Merton在1970年代提出&#xff0c;并为他们赢得了诺贝尔经济学奖。以下是对Black-Scholes方程的详细解释&#xff1a; 基本概念&#xff1a; …

[数据集][目标检测]鲜花检测数据集VOC+YOLO格式25215张106类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;25215 标注数量(xml文件个数)&#xff1a;25215 标注数量(txt文件个数)&#xff1a;25215 标…

初试构建工具Webpack

文章目录 一、Webpack概述二、安装Webpack三、Webpack打包实战1、创建index.js2、创建index.html3、运行webpack4、浏览index.html5、添加第二个脚本&#xff08;1&#xff09;创建index2.js&#xff08;2&#xff09;修改index.js&#xff08;3&#xff09;重新运行 webpack&a…

AtomicIntegerArray使用、核心源码解析

1、API方法使用 构造方法 AtomicIntegerArray atomicIntegerArray1 new AtomicIntegerArray(100); 源码: private final int[] array; public AtomicIntegerArray(int var1) {this.array new int[var1]; }int[] array {10, 20, 30, 0, 0}; AtomicIntegerArray arr new At…

伦理学(Ethics)

讯飞星火 伦理学哲学是一门关于道德问题的科学&#xff0c;旨在系统化和理论化道德思想观点。作为一门独立的哲学分支学科&#xff0c;伦理学的本质是对道德现象进行研究&#xff0c;包括道德意识、道德行为以及道德规范现象等。 伦理学的研究对象广泛&#xff0c;涉及个人的…

驱动(RK3588S)第六课时:linux2.6的使用与GPIO子系统的使用

目录 一、Linux2.6 字符设备驱动编写框架1、合成一个完整的设备号函数2、从完整的设备号里提取主设备号3、动态申请设备号4、静态申请设备号5、释放申请的设备号6、Linux2.6 字符设备驱动的核心结构体7、初始化核心结构体8、向内核去申请 linux2.6 字符设备9、释放申请的设备10…

哈希 详解

目录 1. “哈希”是什么&#xff1f; 2. 哈希冲突 3. 哈希函数 3.1 设计原则 3.2 常见哈希函数 4. 解决哈希冲突的两种常见方法 4.1 闭散列 4.2 开散列 4.3 散列表的扩容问题 5. 哈希表的实现 并 封装模拟实现unordered系列容器 6. 哈希的应用 6.1 位图 -- bitset …

【js逆向专题】2.浏览器调试技巧

小节目标: 熟悉 开发者工具的使用熟悉 代码断点的方式熟悉 网页debugger实现方式 一. 浏览器开发者工具 1. element元素面板 展示浏览器渲染之后的页面 2. network网络面板 浏览器请求的数据都会加载在网络面板 3. console控制台面板 可以在控制台调试你对应的代码 4.…

3000字带你了解SD提示词用法,一点就通,小白轻松上手(附提示词生成器)(1.4 SD提示词运用)

提示词是什么 提示词是我们向AI模型发出的指令。正确的提示词能让AI准确反馈所需的输出&#xff0c;而优质的提示词则能使AI生成的内容更优质、更符合你的期望。这与编写程序代码颇为相似&#xff0c;准确的代码逻辑是程序正常运行的前提&#xff0c;而优秀的代码则能减少运行…

Vue基础概述

Vue框架概述 什么是Vue框架 Vue是一种流行的渐进式JavaScript框架&#xff0c;用于构建Web用户界面。它具有易学、轻量级、灵活性强、高效率等特点&#xff0c;并且可以与其他库和项目集成。是目前最流行的前端框架之一.框架的两种用法: 多页面应用: 在html页面中引入vue.js框…

全倒装共阴节能COB超微小间距LED显示屏主导新型显示技术

COB&#xff08;Chip on Board&#xff09;技术最早发源于上世纪60年代&#xff0c;是将LED芯片直接封装在PCB电路板上&#xff0c;并用特种树脂做整体覆盖。COB实现“点” 光源到“面” 光源的转换。点间距有P0.3、P0.4、P0.5、P0.6、P0.7、P0.9、P1.25、P1.538、P1.5625、P1.…

NanoPC-T6安装redriod笔记

这里主要用于自己对安装过程的记录&#xff0c;中间可能记录比较粗糙。 重新编译内核 参考链接&#xff1a;【环境搭建】基于linux的NanoPC-T6_LTS系统固件编译环境搭建 基于docker构建编译环境 docker run -it \ --privilegedtrue --cap-addALL \ --name nanopc_t6_lts_en…

ESP32!Thonny+MicroPython+ESP32开发环境搭建!!

准备工具&#xff1a; ThonnyMicroPythonESP32 一.Thonny安装 下载地址&#xff1a;Thonny, Python IDE for beginnershttps://thonny.org/ 二.下载esp32环境——根据型号下载 下载地址&#xff1a;MicroPython - Python for microcontrollershttps://micropython.org/dow…

Spring Boot 多数据源配置(JPA)

目录 前言 前置环境 pom yml Entity Dao Config Controller 演示 前言 一般一个系统至少有一个数据源&#xff0c;用来持久化业务数据以及查询。单个数据源的系统很常见&#xff0c;在 Spring Boot 框架下配置也很简单。在约定大于配置这个思想下&#xff0c;只需要在…

vue 中计算属性可以接收参数

代码中的value就是接收的参数 计算属性要接收参数要写在返回的时候 computed: {isButtonDisabled() {return (value) > {const num parseInt(value);return isNaN(num) || num < 0}},},//计算属性aaa(){return (value) >{写逻辑return 返回值}} 使用 <el-butto…

Python OpenCV 深入理解(二)

引言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个用于计算机视觉的开源软件库。它提供了大量的图像处理和机器视觉功能&#xff0c;支持多种编程语言&#xff0c;其中Python接口因其易用性和快速原型设计能力而受到广泛欢迎。本文将详细介绍如何…

基于OMS构建OceanBase容灾双活架构的实践

在实际生产环境中&#xff0c;对于关键业务&#xff0c;往往会有容灾双活的需求。除了OceanBase提供的主备库能力&#xff0c;通过官方工具OMS也可以实现容灾双活架构。目前&#xff0c;通过OMS实现的双活架构仅支持OceanBase数据库之间的数据同步。 要通过OMS实现双活架构&am…

合宙LuatOS开发板Core_Air780EP使用说明

Core-Air780EP 开发板是合宙通信推出的基于 Air780EP 模组所开发的&#xff0c; 包含电源&#xff0c;SIM卡&#xff0c;USB&#xff0c;天线&#xff0c;音频等必要功能的最小硬件系统。 以方便用户在设计前期对 Air780EP模块进行性能评估&#xff0c;功能调试&#xff0c;软…

快速学习GO语言总结

干货分享&#xff0c;感谢您的阅读&#xff01;备注&#xff1a;本博客将自己初步学习GO的总结进行分享&#xff0c;希望大家通过本博客可以在短时间内快速掌握GO的基本程序编码能力&#xff0c;如有错误请留言指正&#xff0c;谢谢&#xff01; 一、初步了解Go语言 &#xf…