当前位置: 首页 > news >正文

指针笔试题解析(4)

指针对于不少人来说:是多么一个难的代名词呀!!当然这个里面也包括笔者!所以……笔者对于指针满满的后怕!但是也有着更多的期待!毕竟阴影是用来打破的!后怕打破了,也就是龙腾虎跃的时候了!!下面进入正题:

笔者将用代码+解析的方式来带领大家走进:指针!!
第一题!

#include <stdio.h>
int main()
{
	int arr[2][5] = { 1,2,3,4,5,6,7,8,9,10 };
	int* ptr1 = (int*)(&arr + 1);
	int* ptr2 = (int*)(*(arr + 1));

	printf("%d %d \n", *(ptr1 - 1), *(ptr2 - 1));  //10  5
	return 0;
}

1.对于数组:    int arr[2][5] = { 1,2,3,4,5,6,7,8,9,10 };

 我们也可以写为:

更为方便使用!!

2. &arr  : 取出的是二维数组的地址!&arr+1,跳过整个数组,通过:(int*)(&arr + 1)  强制类型转化为:整型指针!

&arr+1是一个数组指针!

ptr1的类型为:int* ; ptr1-1向前挪动一个整型,指向10的地址!再通过*(ptr-1)解引用操作,得到10;

3.arr是二维数组的数组名,数组名表示二维数组的首元素的地址!二维数组的首元素为第一行,即表示第一行的地址!arr+1  :跳过第一行,对*(arr+1)进行解引用得到第二行!*(arr+1) 相当于arr[1],即,第二行的数组名!而arr[1]并没有单独放在sizeof内部,也没有进行&(取地址操作),即指:arr[1][0]的地址!也为元素6的地址!而对于:6的地址,不需要转化为:int *  故 题目中的(int*)(*(arr + 1)):int *是迷惑人的!!ptr2拿到6的地址!而对ptr2-1,向前挪动一位,*(ptr2-1)解引用,得到元素5!!

 

代码的运行结果为:

 第二题

#include <stdio.h>
int main()
{
	char* arr[] = { "wolk","at","ailibaba" };
	char** pa = arr;
	pa++;
	printf("%s\n", *pa);  //at
	return 0;
}

对于:     char* arr[] = { "wolk","at","ailibaba" };  数组的每个元素都为: char *   ,即,数组arr里面存放的都是char *的指针(地址)!而字符串作表达式的时候,它的值,实际上为首字符的地址!!

 而对于:char** pa = arr;  pa是一个二级指针,而将arr赋值给pa, a 是数组名,表示首元素的地址!每个元素都是char* ;

但是对于:char **pa,该如何理解?

*pa指的是:pa为指针!char* 告诉我们,pa指向的对象为:char *类型!

pa++: 跳过一个char* 类型的元素大小,即指向at!!

代码的运行结果为:

 对于指针的笔试题,经过4个博客,笔者终于写完了!!在最后,为了考验一下!请自主完成……

#include <stdio.h>
int main()
{
	char* c[] = { "ENTER","NEW","POINT","FIRST" };
	char** cp[] = { c + 3,c + 2,c + 1,c };
	char*** cpp = cp;
	printf("%s\n", **++cpp);
	printf("%s\n", *-- * ++cpp + 3);
	printf("%s\n", *cpp[-2] + 3);
	printf("%s\n", cpp[-1][-1]+1);
	return 0;

}

非常有难度!代码的运行结果为:

 

相关文章:

  • [Spring Boot 3] 整合NoSQL与构建RESTful服务
  • 基于非线规划算法的船舶能量调度
  • 二、PL/SQL 编程基础
  • NGINX源码之:ngx_open_cached_file
  • 【路径规划-机器人栅格地图】基于蚁群算法求解大规模栅格地图路径规划及避障附Matlab代码
  • SpringCache的介绍和使用
  • java-php-python-ssm艾灸减肥管理网站计算机毕业设计
  • 力扣每日一题2022-09-23中等题:设计链表
  • 内存数据库简介-内存数据库性能排行
  • 【云原生】Hadoop on k8s 环境部署
  • 不同编码格式(Unicode、多字节字符)vs环境下使用printf、scanf应注意事项
  • 使用Express获取jquery数据 使用模块化 共享自己的数据库
  • Python算法:决策树分类
  • IDEA插件开发-学习
  • python工具方法35 实现SWA,再一次提升模型的性能
  • python3.6+scrapy+mysql 爬虫实战
  • 自己简单写的 事件订阅机制
  • (三)从jvm层面了解线程的启动和停止
  • @angular/forms 源码解析之双向绑定
  • 【347天】每日项目总结系列085(2018.01.18)
  • Angularjs之国际化
  • css属性的继承、初识值、计算值、当前值、应用值
  • Electron入门介绍
  • Java-详解HashMap
  • jQuery(一)
  • JS笔记四:作用域、变量(函数)提升
  • k8s 面向应用开发者的基础命令
  • markdown编辑器简评
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 构建二叉树进行数值数组的去重及优化
  • 简单易用的leetcode开发测试工具(npm)
  • 如何设计一个比特币钱包服务
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 微信小程序开发问题汇总
  • 优秀架构师必须掌握的架构思维
  • $ git push -u origin master 推送到远程库出错
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (SpringBoot)第二章:Spring创建和使用
  • (八)Flask之app.route装饰器函数的参数
  • (动态规划)5. 最长回文子串 java解决
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (南京观海微电子)——COF介绍
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (五)MySQL的备份及恢复
  • (一)SpringBoot3---尚硅谷总结
  • (一)VirtualBox安装增强功能
  • (转)母版页和相对路径
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .NET Core 实现 Redis 批量查询指定格式的Key