笔试题之指针结合数组的精讲2

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk

      ⸝⋆   ━━━┓
     - 个性标签 - :来于“云”的“羽球人”。 Talk is cheap. Show me the code
┗━━━━━━━  ➴ ⷯ

本人座右铭 :   欲达高峰,必忍其痛;欲戴王冠,必承其重。

👑💎💎👑💎💎👑 
💎💎💎自💎💎💎
💎💎💎信💎💎💎
👑💎💎 💎💎👑    希望在看完我的此篇博客后可以对你有帮助哟

👑👑💎💎💎👑👑   此外,希望各位大佬们在看完后,可以互赞互关一下,看到必回
👑👑👑💎👑👑👑   

 接下来可是满满的干货,咱也就是说,没点底子咱还真拿捏不了

 笔试题1

草图如下:

笔试题2

分析如下:

        int a[4] = { 1, 2, 3, 4 };//在VS环境下,采用小端存储,
        int* ptr1 = (int*)(&a + 1);// 分析同第6行代码分析
        int* ptr2 = (int*)((int)a + 1);//对于这个我们需要知道数据是如何在内存中存储的,注意a这里是首元素的地址,(int)a强转成int 类型数据(int)a+1此时向后移动一个字节
        printf("%x %x", ptr1[-1], *ptr2);// %x是以16进制打印,补充 :%d 是10进制打印  %o是以8进制
        return 0;

 

 

 &a+1 :跳过整个数组的地址,此时对应指针类型int *[5] 即数组指针,(int*)(&a + 1)表示强转成int*类型指针

ptr1[-1] 等价于 *(ptr - 1),访问的是元素4

  数组a在内存中的存储如下:

int* ptr2 = (int*)((int)a + 1);

因为此时ptr2指针类型是int*,所以解引用访问4个字节,即 00 00 00 02 

又因为VS是小端存储

所以以16进制打印出来的是

20000000

笔试题3

            {

        int a[3][2] = { (0,1), (2,3), (4,5) };

        //注意这里是圆括号而不是花括号,圆括号里面是逗号表达式
            int* p;
            p = a[0];    //指向第一行元素的位置
            printf("%d", p[0]);//  1    访问的是第一行第一个位置
        return 0;
    }

草图如下: 

 

笔试题4
int main()
{
	
		int a[5][5];//二维数组,a对应的类型  int(*)[5]
		int(*p)[4];//数组指针,指向数组元素个数为4
		p = a;
		printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
		// p[4] = *(p+4) 跳过4个int(*)[4]的数组     a[4] = *(a+4):跳过4个int (*)[5]的数组
		return 0;
	return 0;
}

分析如下:

 

首先我们要知道几个点:

二维数组我们可以把他看成一维数组的数组

对于指针加整数,跳过几个元素,取决于指针类型,以及是指向数组还是指向元素

对于数组a而言,对应类型int(*)[5] 

a+1  跳过1个类型为int(*)[5]的数组

 对于p而言,对应类型int(*)[4] 

p+1   跳过1个类型为int(*)[4]的数组

指针相减(大减小)得到的是元素个数

笔试题5

int main()
{

	int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int* ptr1 = (int*)(&aa + 1);  // &aa+1跳过整个数组
	int* ptr2 = (int*)(*(aa + 1));// aa类型int(*)[5] 此时跳过一维数组
	printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));//  10   5  

	return 0;
}

 分析如下:

 

笔试题6
    char* a[] = { "work","at","alibaba" };// 这是一个字符指针数组,数组内容是字符串,字符串传递的是第一个字符的地址
	char** pa = a;//数组名表示数组首元素地址,pa此时指向第一个字符串的起始位置
	pa++;//因为pa所对应的指针类型是char**,此时pa++跳过一个元素,即指向第二个字符串的起始位置
	printf("%s\n", *pa);//  at   %s是以字符串的形式打印所以遇到\0即结束打印

解析如下:

首先我们要知道以下几点:

1)这是一个字符指针数组,它的每一个元素是字符串

2)数组名的含义(包括2种特殊情况)

3)指针加整数跳过几个元素

   char** pa = a;

  //数组名表示数组首元素地址,pa此时指向第一个字符串的起始位置
    pa++;

   //因为pa所对应的指针类型是char**,此时pa++跳过一个元素,即指向第二个字符串的起始位置

 要是感觉还不错的话,麻烦各位大佬们给个关注,点个赞呗,您的支持是我不断前进的动力,都看到这里了,想必和我一样对编程世界怀着同样的期待~~

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

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

相关文章

接口测试 —— requests 的基本了解

● requests介绍及安装 ● requests原理及源码介绍 ● 使用requests发送请求 ● 使用requests处理响应 ● get请求参数 ● 发送post请求参数 ● 请求header设置 ● cookie的处理 ● https证书的处理 ● 文件上传、下载 requests介绍 ● requests是python第三方的HTTP…

python -opencv 中值滤波 ,均值滤波,高斯滤波实战

python -opencv 中值滤波 ,均值滤波,高斯滤波实战 cv2.blur-均值滤波 cv2.medianBlur-中值滤波 cv2.GaussianBlur-高斯滤波 直接看代码吧,代码很简单: import copy import math import matplotlib.pyplot as plt import matp…

对线程的创建

一,概括 二,线程构建方式一(继承Thread类) 三,案例 父类: package Duoxiancheng;public abstract class Name {public static void main(String[] args) {//3,创建一个Thread线程类对象Thr…

【小黑送书—第九期】>>重磅!这本30w人都在看的Python数据分析畅销书:更新了!

想学习python进行数据分析,这本《利用python进行数据分析》是绕不开的一本书。目前该书根据Python3.10已经更新到第三版。 Python 语言极具吸引力。自从 1991 年诞生以来,Python 如今已经成为最受欢迎的解释型编程语言。 pandas 诞生于2008年。它是由韦…

__int128类型movaps指令crash

结论 在使用__int128时,如果__int128类型的内存起始地址不是按16字节对齐的话,有些汇编指令会抛出SIGSEGV使程序crash。 malloc在64位系统中申请的内存地址,是按16字节对齐的,但一般使用时经常会申请一块内存自己切割使用&#…

Selenium浏览器自动化测试框架

介绍 Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome&#xff…

vs调试输出,不显示线程已退出

如题:一堆线程退出的信息,招人烦。 其实在vs设置里可以关闭: 工具-->选项-->调试-->输出窗口:

动态跳过测试用例

动态跳过测试用例 说明 我们可以通过指定环境变量来动态判断是否执行指定的测试用例设置环境变量有很多种方法,例如命令行方式,格式:--env keyval1,key2val2 ,若需要指定多个环境变量则需要逗号来隔开,而不是空格 t…

innoDB的缓冲池(Buffer Pool)的工作原理

数据存在磁盘了,总不能次次和磁盘交互吧,所以innoDB有一个缓冲池(Buffer Pool),有了缓冲池后,读写就优先在缓冲池了。读先在缓冲池读,没有再去磁盘加载进缓冲池;写也是先写缓冲池&am…

调试接口速度,打印毫秒数,找出慢的地方,优化

方法的最开头写上 $start_time microtime(true); 然后代码行里 dump(All 1: time ’ . (microtime(true) - $start_time)); dump(All 1.2: time ’ . (microtime(true) - $start_time)); 类似这样的最终打印

[C++] STL_stack queue接口的模拟实现

文章目录 1、stack1.1 stack的介绍1.2.1 stack的构造1.2.2 进、出栈等接口的模拟实现 2、queue2.1 queue的介绍2.2 queue的使用2.2.1 queue构造2.2.2 入、出队等接口的模拟实现 1、stack 1.1 stack的介绍 stack的文档介绍 1. stack是一种容器适配器,专门用在具有…

Linux程序之可变参数选项那些事!

一、linux应用程序如何接收参数? 1. argc、argv Linux应用程序执行时,我们往往通过命令行带入参数给程序,比如 ls /dev/ -l 其中参数 /dev/ 、-l都是作为参数传递给命令 ls 应用程序又是如何接收这些参数的? 通常应用程序都…

thinkphp文件夹生成zip压缩包

一、准备工作&#xff0c;使用phpinfo()查看有没有zip扩展 <?php echo phpinfo(); ?>Thinkphp使用PHP自带的ZipArchive压缩文件或文件夹 显示enabled 说明已经配置好 如果没有安装扩展的&#xff0c;请参照以下方法&#xff1a; 1、下载对应版本的扩展包&#xff1a…

还不知道指针和引用的区别,一篇文章教会你

1、引用的概念 1.引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名 2.编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间 比如:孙悟空&#xff0c;可以叫他孙悟空&#xff0c;也可以叫齐天大圣。本质他们就是一个人 2、引用的定…

opencv- CLAHE 有限对比适应性直方图均衡化

CLAHE&#xff08;Contrast Limited Adaptive Histogram Equalization&#xff09;是一种对比度有限的自适应直方图均衡化技术&#xff0c;它能够提高图像的对比度而又避免过度增强噪声。 在OpenCV中&#xff0c;cv2.createCLAHE() 函数用于创建CLAHE对象&#xff0c;然后可以…

Python 安装win32com失败

今天进行服务器迁移&#xff0c; 中间有用的python调用win32com组件让docx转换成pdf。不出意外的话出意外了&#xff0c;pip安装win32com的时候各种安装不上&#xff0c; 今天处理完问题之后&#xff0c;记录一下&#xff0c;与人方便与己方便。 在cmd上面&#xff0c;一开始…

配置静态 Eth-trunk

1、需求 1&#xff09;交换网络中存在2个 VLAN – 10 和 20 2&#xff09;每个VLAN的IP地址为&#xff1a;192.168.xx.0/24&#xff08;xx为 vlan 号&#xff09; 3&#xff09;对交换机之间的链路进行链路捆绑&#xff0c;增加互联带宽 4&#xff09;确保同 VLAN的 PC 之间互…

static和extern

1.extern extern 是⽤来声明外部符号的&#xff0c;如果⼀个全局的符号在A⽂件中定义的&#xff0c;在B⽂件中想使⽤&#xff0c;就可以使⽤ extern 进⾏声明&#xff0c;然后使⽤。 即在一个源文件中想要使用另一个源文件&#xff0c;即可通过这个extern来声明使用。 2.st…

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示用户自定义字符应用

基于基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示两行常规字符应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍通过液晶显…

规则引擎Drools使用,0基础入门规则引擎Drools(一)基础入门

文章目录 系列文章索引一、规则引擎概述1、引出问题2、什么是规则引擎3、使用规则引擎的优势4、规则引擎应用场景 二、Drools介绍1、Drools概述2、Drools构成3、相关概念说明4、Drools执行过程5、KIE介绍 三、Drools入门案例1、业务场景说明2、开发实现 四、Drools基础语法1、规…