一篇文章让你搞懂指针和数组笔试题(加深对指针的理解)

news2024/11/16 5:21:49

在这里插入图片描述

指针和数组笔试题解析

下文哦我们直接结合代码进行讲述

一维数组

1

//一维数组
#include<stdio.h>
int main()
{
	//一维数组
	int a[] = { 1,2,3,4 };
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(a + 0));
	printf("%d\n", sizeof(*a));
	printf("%d\n", sizeof(a + 1));
	printf("%d\n", sizeof(a[1]));
	printf("%d\n", sizeof(&a));
	printf("%d\n", sizeof(*&a));
	printf("%d\n", sizeof(&a + 1));
	printf("%d\n", sizeof(&a[0]));
	printf("%d\n", sizeof(&a[0] + 1));
	return 0;
}

先给大家复习一下
数组名是数组首元素的地址
1:sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节
2:&数组名,这里的数组名表示整个数组,取出的是整个数组的地址
我们一个一个给大家分析一下
1:4*4=16
2:数组名a是首元素的地址,a+0还是首元素的地址,地址的大小是4/8
3:数组名a是首元素的地址,*a就是首元素,大小就是4个字节
4:数组名a是数组首元素的地址,a+1是第二个元素的地址,地址的大小是4/8
5:第二个元素的大小就是4个字节
6:&a是数组的地址,数组的地址也是地址,是地址就是4/8个字节
7:16个字节
8:&a+1相当于&a跳过了是跳过了整个数组,但是即使跳过了整个数组,&a+1还是地址,所以是4/8个字节
9:&a[0]是首元素的地址,4/8个字节
10:&a[0]是首元素的地址,&a[0]+1就是第二个元素的地址,所以是4/8个字节
在这里插入图片描述

//一维数组
#include<stdio.h>
int main()
{
	//一维数组
	int a[] = { 1,2,3,4 };
	printf("%d\n", sizeof(a));//16
	printf("%d\n", sizeof(a + 0));//4/8
	printf("%d\n", sizeof(*a));//4
	printf("%d\n", sizeof(a + 1));//4/8
	printf("%d\n", sizeof(a[1]));//4
	printf("%d\n", sizeof(&a));//4/8
	printf("%d\n", sizeof(*&a));//16个字节
	//sizeof(*&a)-->sizeof(a)--16
	//&a-->int(*)[4]
	//*&a
	printf("%d\n", sizeof(&a + 1));//4/8
	printf("%d\n", sizeof(&a[0]));//4/8
	printf("%d\n", sizeof(&a[0] + 1));//4/8
	return 0;
}

字符数组

1

//字符数组
char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr+0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr+1));
printf("%d\n", sizeof(&arr[0]+1));

依然还是给大家解释一下
1:数组名单独放在sizeof内部,这里的arr表示整个数组,计算的是整个数组的大小,单位是字节,所以一共6个字节
2:arr表示数组首元素的地址,arr+0还是数组首元素的地址,是地址就是4/8个字节
3:arr表示数组首元素的地址,*arr就是首元素,大小为1个字节
4:arr[1]就是第二个元素,大小为1个字节
5:&arr是数组的地址,数组的地址本质上也是地址,地址的大小为4/8个字节
6:&arr+1是跳过整个数组后的地址,是地址就是4/8个字节
7:第二个元素的地址,4/8个字节
在这里插入图片描述

#include<stdio.h>
int main()
{
	//字符数组
	char arr[] = { 'a','b','c','d','e','f' };
	printf("%d\n", sizeof(arr));//6个字节
	printf("%d\n", sizeof(arr + 0));//4/8个字节
	printf("%d\n", sizeof(*arr));//1个字节
	printf("%d\n", sizeof(arr[1]));//1个字节
	printf("%d\n", sizeof(&arr));//4/8个字节
	printf("%d\n", sizeof(&arr + 1));//4/8个字节
	printf("%d\n", sizeof(&arr[0] + 1));//4/8个字节
	return 0;
}

2

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[] = { 'a','b','c','d','e','f' };
	printf("%d\n", strlen(arr));
	printf("%d\n", strlen(arr + 0));
	printf("%d\n", strlen(*arr));
	printf("%d\n", strlen(arr[1]));
	printf("%d\n", strlen(&arr));
	printf("%d\n", strlen(&arr + 1));
	printf("%d\n", strlen(&arr[0] + 1));
	return 0;
}

1:因为字符数组arr中没有\0,所以在求字符串长度的时候,会一直往后找,产生的数值就是随机值
2:arr+0是首元素的地址,和第一个一样也是随机值
3:arr是数组首元素的地址,*arr就是数组首元素,就是’a’—97,这个地址并不是你本身的,所以非法访问
strlen函数参数的部分需要传一个地址,当我们传递的是’a’时,'a’的ASCLL码值是97,那就是将97作为地址传参
strlen就会从97这个地址开始统计字符串长度,这就属于非法访问了
4:error//同理第三行代码

size_t strlen ( const char * str );

5:指针类型转化为srelen参数的类型,站在strlen参数的角度他依然是指向数组首元素的,值传过之后,类型编译器自动转化,所以&arr是数组的地址,数组的地址和数组首元素的地址值是一样的,那么传递给strlen函数后,依然是从数组的第一个元素的位置开始往后统计
6:随机值
7:&arr[0]+1是第二个元素的地址,结果也是随机值
在这里插入图片描述

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[] = { 'a','b','c','d','e','f' };
	printf("%d\n", strlen(arr));//因为字符数组arr中没有\0,所以在求字符串长度时,会一直往后找,产生的结果就是随机值
	printf("%d\n", strlen(arr + 0));//arr+0是首元素的地址,和第一个一样也是随机值
	printf("%d\n", strlen(*arr));//error//arr是数组首元素的地址,*arr就是数组首元素,就是'a'--97
	//strlen函数参数的部分需要传一个地址,当我们传递的是'a'时,'a'的ASCLL码值就是97,那么就是将97作为地址传参
	//strlen函数会从97这个地址开始统计字符串长度,属于非法访问

	printf("%d\n", strlen(arr[1]));//error
	printf("%d\n", strlen(&arr));//&arr是数组的地址,数组的地址和数组首元素的地址值是一样的,那么传递给strlen函数后,依然是从数组的第一个元素的位置开始往后统计
	printf("%d\n", strlen(&arr + 1));//随机值
	printf("%d\n", strlen(&arr[0] + 1));//&arr[0]+1是第二个元素的地址,结果也是随机值-1
	return 0;
}

3

#include<stdio.h>
//#include<string.h>
int main()
{
	char arr[] = "abcdef";
	printf("%d\n", sizeof(arr));
	printf("%d\n", sizeof(arr + 0));
	printf("%d\n", sizeof(*arr));
	printf("%d\n", sizeof(arr[1]));
	printf("%d\n", sizeof(&arr));
	printf("%d\n", sizeof(&arr + 1));
	printf("%d\n", sizeof(&arr[0] + 1));
	return 0;
}

字符串末尾自带\0
1:sizeof只关心你占了多大的空间,所以是7个字节
2:arr+0是首元素的地址
3:*arr其实是首元素,1个字节
4:arr[1]是第二个元素,1个字节
5:&arr是数组的地址,是地址就是4/8个字节
6:&arr+1是跳过一个数组的地址,所以是4/8个字节
7:&arr[0]+1是第二个元素的地址,所以是4/8个字节

#include<stdio.h>
//#include<string.h>
int main()
{
	char arr[] = "abcdef";
	printf("%d\n", sizeof(arr));//7
	printf("%d\n", sizeof(arr + 0));//arr+0是首元素的地址
	printf("%d\n", sizeof(*arr));//*arr是首元素,1个字节
	//*arr-->*(arr+0)---arr[0]
	printf("%d\n", sizeof(arr[1]));//arr[1]是第二个元素,1个字节
	printf("%d\n", sizeof(&arr));//&arr是数组的地址,是地址就是4/8个字节
	printf("%d\n", sizeof(&arr + 1));//&arr+1是跳过一个数组的地址,4/8个字节
	printf("%d\n", sizeof(&arr[0] + 1));//&arr[0]+1是第二个元素的地址 4/8个字节
	return 0;
}

4

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[] = "abcdef";
	printf("%d\n", strlen(arr));
	printf("%d\n", strlen(arr + 0));
	printf("%d\n", strlen(*arr));
	printf("%d\n", strlen(arr[1]));
	printf("%d\n", strlen(&arr));
	printf("%d\n", strlen(&arr + 1));
	printf("%d\n", strlen(&arr[0] + 1));
	return 0;
}

1:在\0之前会找到6个字符,所以为6
2:和第一个相同也为6
3:错误,因为*arr是我们的字符a,所以非法访问
4:错误,和3同理
5:数组的地址也是从字符a开始往后数,所以为6
6:随机值,&arr+1跳过了\0,所以再去找的时候就是随机值
7:跳到字符b处进行访问,所以为5
在这里插入图片描述

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[] = "abcdef";
	printf("%d\n", strlen(arr));//6
	printf("%d\n", strlen(arr + 0));//6
	printf("%d\n", strlen(*arr));//error
	printf("%d\n", strlen(arr[1]));//error
	printf("%d\n", strlen(&arr));//6
	printf("%d\n", strlen(&arr + 1));//随机值
	printf("%d\n", strlen(&arr[0] + 1));//5
	return 0;
}

5

#include<stdio.h>
//#include<string.h>
int main()
{
	char* p = "abcdef";
	printf("%d\n", sizeof(p));
	printf("%d\n", sizeof(p + 1));
	printf("%d\n", sizeof(*p));
	printf("%d\n", sizeof(p[0]));
	printf("%d\n", sizeof(&p));
	printf("%d\n", sizeof(&p + 1));
	printf("%d\n", sizeof(&p[0] + 1));
	return 0;
}

p指向了字符a
1:p是一个指针变量//大小为4/8个字节
2:p+1是’b’的地址,是地址大小就是4/8个字节
3:*p就是首元素’a’,就是一个字节
4:p[0]—>(p+0)—>*p—1个字节
5:&p—4/8个字节
6:&p+1指向指针变量p的末尾,&p用一个二级指针来存储
7:&p[0]+1得到的是’b’的地址
在这里插入图片描述

#include<stdio.h>
//#include<string.h>
int main()
{
	char* p = "abcdef";
	printf("%d\n", sizeof(p));//p是一个指针变量//4/8个字节
	printf("%d\n", sizeof(p + 1));//p+1是'b'的地址,是地址大小就是4/8个字节
	printf("%d\n", sizeof(*p));//*p就是'a',就是1个字节
	printf("%d\n", sizeof(p[0]));//p[0]-->*(p+0)-->  1个字节
	printf("%d\n", sizeof(&p));//4/8
	printf("%d\n", sizeof(&p + 1));//4/8
	printf("%d\n", sizeof(&p[0] + 1));//4/8//&p[0]+1得到的是'b'的地址
	return 0;
}

6

#include<stdio.h>
#include<string.h>
int main()
{
	char* p = "abcdef";
	printf("%d\n", strlen(p));
	printf("%d\n", strlen(p + 1));
	printf("%d\n", strlen(*p));
	printf("%d\n", strlen(p[0]));
	printf("%d\n", strlen(&p));
	printf("%d\n", strlen(&p + 1));
	printf("%d\n", strlen(&p[0] + 1));
	return 0;
}

字符串本身是可以理解为数组的
字符串是一块连续的空间只不过存放的是字符而已
1:毋庸置疑是6
2:p里面本身存放的是a的地址,加1就是b的地址了,所以是5
3:error—非法访问
4:error—非法访问
5:随机值—对于&p里面的每一个字节是什么我们都不知道,编译器为p分配的地址以及内容是什么我们都不知道,所以什么时候遇到\0我们也不是到,这里会运用到大小端的知识,如果p的地址最后一个字节为十六进制数00也就是\0我们就可以得到确定的数,但是现在我们并不清楚,所以是随机值
6:随机值—和上面的随机值没有关系----因为遇到\0的时机不同等等
7:从’b’的地址开始往后数----5

二维数组

1

#include<stdio.h>
int main()
{
	//二维数组
	int a[3][4] = { 0 };
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(a[0][0]));
	printf("%d\n", sizeof(a[0]));
	printf("%d\n", sizeof(a[0] + 1));
	printf("%d\n", sizeof(*(a[0] + 1)));
	printf("%d\n", sizeof(a + 1));
	printf("%d\n", sizeof(*(a + 1)));
	printf("%d\n", sizeof(&a[0] + 1));
	printf("%d\n", sizeof(*(&a[0] + 1)));
	printf("%d\n", sizeof(*a));
	printf("%d\n", sizeof(a[3]));
	return 0;
}

1:344=48
2:4
3:a[0]是第一行这个一维数组的数组名//数组名算是单独放在sizeof内部了,计算的是整个数组的大小,大小是16个字节
4;a[0]作为第一行的数组名,没有单独放在sizeof内部,没有&,a[0]表示数组首元素的地址,也就是a[0][0]的地址,所以a[0]+1是第一行第二个元素的地址,是地址就是4/8个字节
5:计算的是第一行第二个元素的大小
6:a是数组首元素的地址,是第一行的地址,a+1就是第二行的地址
7:访问的是第二行的数组
8:&a[0]是第一行的地址,&a[0]+1是第二行的地址
9:计算的是第二行的大小—16
10:计算的是第一行的大小—16,a是数组首元素的地址,就是第一行的地址,*a就是第一行,a–>(a+0)–>a[0]
11:16,虽然越界,但是sizeof计算的类型的大小
在这里插入图片描述

//int main()
//{
//	int a[3][4] = { 0 };
//
//	printf("%d\n", sizeof(a));//3*4*4 = 48
//	printf("%d\n", sizeof(a[0][0]));//4
//
//	printf("%d\n", sizeof(a[0]));//a[0]是第一行这个一维数组的数组名
//	//数组名算是单独放在sizeof内部了,计算的是整个数组的大小,大小是16个字节
//
//	printf("%d\n", sizeof(a[0] + 1));//?
//	//a[0]作为第一行的数组名,没有单独放在sizeo内部,没有&
//	//a[0]表示数组首元素的地址,也就是a[0][0]的地址
//	//所以a[0]+1是第一行第二个元素的地址,是地址就是4/8个字节
//	//
//	printf("%d\n", sizeof(*(a[0] + 1)));//4
//	//计算的是就是第一行第2个元素的大小
//
//	printf("%d\n", sizeof(a + 1));//4 / 8
//	//a是数组首元素的地址,是第一行的地址 int(*)[4]
//	//a+1 就是第二行的地址
//
//	printf("%d\n", sizeof(*(a + 1)));//16
//	//*(a+1) --> a[1] -> sizeof(*(a+1))->sizeof(a[1]) 计算的是第二行的大小
//	//a+1 --> 是第二行的地址,int(*)[4]
//	//*(a+1) 访问的第二行的数组
//
//	printf("%d\n", sizeof(&a[0] + 1));//4/8
//	//&a[0]是第一行的地址 int(*)[4]
//	//&a[0]+1 是第二行的地址 int(*)[4]
//
//	printf("%d\n", sizeof(*(&a[0] + 1)));//16 计算的是第二行的大小
//
//	printf("%d\n", sizeof(*a));//计算的是第一行的大小-16
//	//a是数组首元素的地址,就是第一行的地址
//	//*a 就是第一行
//	//*a --> *(a+0) --> a[0]
//
//	printf("%d\n", sizeof(a[3]));//16
//	//a[3]--> int [4]
//	//
//	return 0;
//}

总结: 数组名的意义:

  1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
  2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
  3. 除此之外所有的数组名都表示首元素的地址。

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

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

相关文章

【C的葵花宝典进阶篇】之指针进阶(一)

【C语言进阶篇】之指针进阶&#xff08;一&#xff09; 1. 字符指针2. 指针数组2.1 整形指针数组2.2 用指针数组模拟二维数组 3. 数组指针3.1 数组指针的表示方法3.2 深度剖析&数组名和数组名3.3 数组指针的使用3.3.1 在同一函数内直接将数组的地址赋给数组指针3.3.2 数组指…

Flink提交作业时报错Cannot support file system for ‘hdfs‘ via Hadoop

Flink整合HDFS提交作业时报错 分享一个Flink提交作业时的报错&#xff0c;由于我用的是1.12版本的Flink&#xff0c;对于Hadoop3.0新特性是没有支持的&#xff0c;我的Hadoop版本是3.3.1。然后flink-shaded-hadoop-3-uber jar包是没有的&#xff0c;需要手动添加。 报错 Caus…

6、选中tiles的模型并高亮

本节演示选中3dtiles的模型&#xff0c;选中模型与ceisum基本一致。通过鼠标左键单击模型并将选中的模型进行高亮。使用上一节的示例&#xff0c;再添加鼠标左键单击事件用于选中模型。 1、修改Handler类&#xff0c;添加静态函数onLeftClick&#xff0c;参数与右键单击函数一…

ubuntu无法定位软件包 tfpd-hpa

安装sudo apt-get install tftp-hpa tftpd-hpa 提示无法定位软件包tfpd-hpa 搜索一下解决方法是需要sudo apt-get update之后才可 结果sudo apt-get update提示索引文件下载失败 按照网上的解决办法更改/etc/apt/sources.list里面的下载源问题依旧&#xff0c;然后又把source…

怎么把word转换成只有一页的长页PDF?

来百度APP畅享高清图片 要将Word文档打印成一长页的PDF格式&#xff0c;我们得先知道word转PDF的工作原理。word转pdf其实就是将word打印出来&#xff0c;就是跟你用物理打印机打印的原理是差不多的&#xff0c;所不同的是&#xff0c;PDF虚拟打印的原理是利用虚拟打印机驱动程…

新手入门深度学习 | 6-2:AlexNet(2012)详解

&#x1f517; 运行环境&#xff1a;python3&#x1f6a9; 作者&#xff1a;K同学啊&#x1f947; 精选专栏&#xff1a;《深度学习100例》&#x1f525; 推荐专栏&#xff1a;《新手入门深度学习》&#x1f4da; 选自专栏&#xff1a;《Matplotlib教程》&#x1f9ff; 优秀专栏…

oracle新建库(表空间)表

文章目录 前言一、sqlplus登录二、表空间1.新建表空间2. 查看表空间3. 查看表空间和对应数据文件4.表空间增加数据文件5.删除单个数据文件&#xff08;只有一个默认的会删除失败&#xff09;6.删除表空间及数据文件(慎用) 三、创建新用户并指定表空间1.去掉前缀2.新建用户&…

C语言是一种通用的、面向过程的编程语言

具有以下特点&#xff1a; 简洁而高效&#xff1a;C语言的语法相对简单&#xff0c;同时提供了丰富的编程结构和功能&#xff0c;使得开发者能够用较少的代码实现复杂的任务。C语言的执行效率高&#xff0c;能够直接操作计算机硬件&#xff0c;提供了底层的控制和优化能力。 可…

时间序列预测 | Matlab基于极限梯度提升树XGBoost时间序列预测,XGBoost时间序列预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab基于极限梯度提升树XGBoost时间序列预测,XGBoost时间序列预测模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码

后端开发常见技术场景

文章目录 1、单点登录这块怎么实现的1.1 概述1.2 JWT解决单点登录1.3 回答要点 2、权限认证是如何实现的2.1 概述2.2 RBAC权限模型2.3 回答要点 3、上传数据的安全性你们怎么控制&#xff1f;3.1 概述3.2 对称加密3.3 非对称加密3.4 回答要点 4、你负责项目的时候遇到了哪些比较…

【Ubuntu学习MySQL——导出数据报错ERROR1290】

将数据表 runoob_tbl 数据导出到 /tmp/runoob.txt 文件中出错&#xff1a; 这是因为mysql有个安全变量限制。可以通过以下语句查看设置的路径&#xff0c;然后将要导入到的文件名称改到此路径下即可。

现场工程师宝典-流式处理的异常现象以及提高吞吐能力的常见优化策略

流式处理区别于按包处理&#xff0c;指的是对处理者而言&#xff0c;面对的是逻辑上无头无尾的数据流。因此&#xff0c;在提取数据流中的包时&#xff0c;就需要遵循其内在的格式&#xff0c;进行头部捕获、提取、校验。然而&#xff0c;如果不考虑TCP等流式数据的异常情况&am…

视频怎么做成二维码?一招轻松制作二维码

怎么把视频做成二维码&#xff1f;现在用二维码来做载体存储视频&#xff0c;这种方法能够有效的减少内存占用&#xff0c;可以将视频储存在云端&#xff0c;他人只需要扫码就能够查看视频。下面来教大家一招关于视频二维码制作&#xff08;音视频二维码制作-一键免费生成音视频…

Kafka传输数据到Spark Streaming通过编写程序java、scala程序实现操作

一、案例说明 现有一电商网站数据文件&#xff0c;名为buyer_favorite1&#xff0c;记录了用户对商品的收藏数据&#xff0c;数据以“\t”键分割&#xff0c;数据内容及数据格式如下&#xff1a; 二、前置准备工作 项目环境说明 Linux Ubuntu 16.04jdk-7u75-linux-x64scal…

(LFPAK56)BUK7Y7R0-40HX 40V、N 通道BUK9Y6R5-40HX表面贴装汽车用MOSFET器件

汽车用MOSFET将低压超级结技术与先进的封装设计相结合&#xff0c;以实现高性能和耐用性。Trench 9 MOSFET系列产品全部符合AEC-Q101标准&#xff0c;且超越了这一国际汽车级标准的要求&#xff0c;在包括温度循环 (TC)、耐高温栅极偏置 (HTGB)、耐高温反向偏置 (HTRB) 和断续工…

DBETR-1X/180G24K4M反馈型比例压力阀放大器

DBETR-1X/30G24K4M&#xff0c;DBETR-1X/315G24K4M&#xff0c;DBETR-1X/80G24K4M&#xff0c;DBETR-1X/180G24K4M&#xff0c;DBETR-1X/230G24K4M&#xff0c;DBETR-1X/350G24K4M比例溢流阀是一种遥控阀。其设计结构为座阀式直动溢流阀&#xff0c;搭配外置式比例放大器。 这…

挑选适合自己的英文原版书

很多人在阅读英文原版小说时感觉十分吃力&#xff0c;有很多生词或长难句。如何寻找适合自己英文阅读水平的书籍呢&#xff1f;下面推荐一种按蓝思值挑选英文原版书的方法。 首先根据自己的受教育程度&#xff0c;选择对应蓝思级别的英文书。如博士可以选择蓝思值为1300L的英文…

图神经网络:(图像分割)三维网格图像分割

文章说明&#xff1a; 1)参考资料&#xff1a;PYG的文档。文档超链。斯坦福大学的机器学习课程。课程超链。(要挂梯子)。博客原文。原文超链。(要挂梯子)。原文理论参考文献。提取码8848。 2)我在百度网盘上传这篇文章的jupyter notebook以及预训练模型。提取码8848. 3)博主水平…

qt信号与槽

信号与槽的概念&#xff1a; 1>信号&#xff1a;信号就是信号函数&#xff0c;可以是组件自身提供&#xff0c;也可以是用户自己定义&#xff0c;自定义时&#xff0c;需要类体的signals权限下进行定义&#xff0c;该函数是一个不完整的函数&#xff0c;只有声明&#xff0…

输入一个链表,输出该链表的倒数第 k 的结点

一、思路 假设 K 是 2&#xff0c;根据下面的图片可以看出&#xff0c;倒数第 K 个结点就是 45。 需要注意的前提是&#xff0c;K 不能是负数也不能是 0 并且也不能超过链表的结点个数&#xff0c;因为要保证 K 是在链表的范围里&#xff0c;才能找到 K&#xff0c;然后返回这…