C语言--- 指针运算笔试题详解

目录

题目1:

题目2:

题目3:

题目4:

题目5:

题目6:

题目7:


 

题目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));
     return 0;
}

解析:

a是数组首元素的地址,类型为int*,+1跳过一个元素,再解引用就是第二个元素。

&a是整个数组的地址,+1跳过整个数组,再强制类型转化为int*类型,-1就是数组最后一个元素的地址,解引用后就是最后一个元素。

答案:

2,5

题目2:

struct Test
{
	int Num;
	char* pcName;
	short sDate;
	char cha[2];
	short sBa[4];
}*p = (struct Test*)0x100000;
//在X86环境下
//假设结构体的⼤⼩是20个字节
//程序输出的结构是啥?
int main()
{
	printf("%p\n", p + 0x1);
	printf("%p\n", (unsigned long)p + 0x1);
	printf("%p\n", (unsigned int*)p + 0x1);
	return 0;
}

解析:

p是一个指针,类型是struct Test*,是由十六进制数字0x100000强制类型转换为struct Test*类型所得到的。

0x1就是1,p+1就是跳过一个元素,一个结构体的大小是20个字节,地址就加20,变成0x00100014.将p强制类型转化为unsigned long类型的值再加1,就是单纯的数学运算,结果是0x00100001.将p强制类型转化为unsigned int*类型的指针,+1跳过4个字节就是0x00100004

题目3:

#include <stdio.h>
int main()
{
 int a[3][2] = { (0, 1), (2, 3), (4, 5) };
 int *p;
 p = a[0];
 printf( "%d", p[0]);
 return 0;
}

 解析:

a数组是一个二维数组,但是初始化的是用的括号,括号的结果是逗号表达式的结果,也就是最后一个逗号后面的表达式的值。这个数组初始化的值前三个分别是1,3,5,其余默认是0

a[0]是第一行的数组名,也就是第一行首元素的地址,p[0]可以写成*p,所以就是第一个元素。结果就是1.

题目4:

//假设环境是x86环境,程序输出的结果是啥?
#include <stdio.h>
int main()
{
 int a[5][5];
 int(*p)[4];
 p = a;
 printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
 return 0;
}

 解析:

二维数组的元素在内存中也是连续排列,所以a数组也可以看成一个元素个数为25个的一维数组。

a是第一行的地址,类型是int *[5],p是int *[4],&p[4][2]就可以看成第(3 * 4 + 3)个元素的地址,&a[4][2]就是第(3 * 5 + 3)个元素的地址,指针相加减得到的是地址之间的元素个数,也就是4个元素,但是值是-4,分别以十六进制和十进制打印,整数在内存中是以补码的形式存储,所以-4的十六进制,和十进制分别是

//1000 00000000 00000000 00000000 0011 原码
//1111 11111111 11111111 11111111 1100 反码
//1111 11111111 11111111 11111111 1101 补码
//F    F   F    F   F    F   F    C

题目5:

#include <stdio.h>
int main()
{
int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int *ptr1 = (int *)(&aa + 1);
int *ptr2 = (int *)(*(aa + 1));
printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1));
return 0;
}

&aa是整个数组的地址,+1跳过整个数组转化为int*类型后 ,-1向前跳过4个字节,也就是数组最后一个元素的地址,再解引用就是 10

*(aa+1)就是aa[1],第二行的数组名,第二行首元素的地址,转化为int*后,-1就是第一行最后一个元素的地址,再解引用就是5.

题目6:

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

解析:

a数组是一个元素类型为char*类型的地址,a是数组名,也是数组首元素的地址,也就是一个二级指针,因为它指向的元素也是一个指针,pa++,就变成了第二个元素的地址,解引用后就是字符串at。

题目7:

#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;
}

解析:

	printf("%s\n", **++cpp);
	//cpp是cp数组首元素的地址,也就是c+3的地址
	//++cpp,就变成了c+2的地址
	//*++cpp,就是c+2
	//c是"ENTER"的地址
	//c+2就是"POINT"的地址
	//再解引用就是"POINT"
	//打印POINT
	printf("%s\n", *-- * ++cpp + 3);
	//++cpp,就变成了c+1的地址
	//*++cpp,就是C+1,
	//c+1就是"NEW"的地址
	//再--,就是"ENTER"的地址
	//再*就是"ENTER",首字符的地址,然后+3,就是"E"的地址,
	// 最后打印ER
	printf("%s\n", *cpp[-2] + 3);
	//cpp[-2]就是*(cpp-2)
	//cpp-2就是C+3的地址
	//*后就是C+3
	//再*就是"FIRST",然后加3,就是"S"的地址,
	//打印ST
	printf("%s\n", cpp[-1][-1] + 1);
	//cpp[-1][-1]就是*(*(cpp-1)-1)
	//cpp-1就是C+2的地址,
	//*后就是C+2,-1,就是C+1
	//C+1是"NEW"的地址,*后就是"NEW",+1就是"E"的地址,
	//打印EW

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

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

相关文章

Open3D 利用四个点计算球心和半径 (28)

Open3D 利用四个点计算球心和半径 (28) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 给定的四个点坐标,计算球心和半径,提供验证的四个点来比较最终的结果是否准确。 二、算法实现 1.代码 代码如下(示例): import numpy as npdef calculate_sphere_center_…

课时61:流程控制_if条件控制_嵌套if实践

2.2.3 嵌套if实践 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 一个if语句仅仅能够针对一个场景的多种情况。当我们面对多场景的条件判断的时候&#xff0c;一个if结构语句无法满足需求&#xff0c;这个时候&#xff0c;我…

海格里斯HEGERLS智能托盘四向车系统为物流仓储自动化升级提供新答案

随着实体企业面临需求多样化、订单履行实时化、商业模式加速迭代等挑战&#xff0c;客户对物流仓储解决方案的需求也逐渐趋向于柔性化、智能化。作为近十年来发展起来的新型智能仓储设备&#xff0c;四向车系统正是弥补了先前托盘搬运领域柔性解决方案的空白。随着小车本体设计…

【AI】如何创建自己的自定义ChatGPT

如何创建自己的自定义ChatGPT 目录 如何创建自己的自定义ChatGPT大型语言模型(LLM)GPT模型ChatGPTOpenAI APILlamaIndexLangChain参考推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课本文将记录如何使用OpenAI GPT-3.5模型、LlamaIndex和LangChain创建自己的…

Grunt、Gulp 与 webpack:谁更胜一筹?

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

PWM驱动智能小车舵机运动

文章目录 一、硬件电路二、舵机初始化三、舵机控制 一、硬件电路 通过TIMER3的通道3提供PWM驱动电机 二、舵机初始化 初始化让舵机位于最左边&#xff0c;也就是0。 static int ServoInit(struct Servo *ptdev){if(NULL ptdev){LogDebug("ServoInit EINVAL \r\n&qu…

力扣题目训练(19)

2024年2月12日力扣题目训练 2024年2月12日力扣题目训练575. 分糖果589. N 叉树的前序遍历590. N 叉树的后序遍历275. H 指数 II279. 完全平方数132. 分割回文串 II 2024年2月12日力扣题目训练 2024年2月12日第十九天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;…

蓝桥杯刷题7

目录 1. 字母数 2. 列名 3. 大乘积 4. 最大连通 5. 星期几 1. 字母数 public class Main {public static void main(String[] args) {int num 2023;while(true) {String mInteger.toString(num,16);if(m.matches("^[a-f]$")){System.out.println(num);break;}n…

人生旅途:清理过往,规划未来,松弛前行

在人生的道路上&#xff0c;我们时常会遭遇各种障碍和挑战。这些障碍可能来自于外界环境的压力&#xff0c;也可能来自于内心的困惑和迷茫。然而&#xff0c;正是这些障碍和挑战&#xff0c;塑造了我们的性格&#xff0c;让我们变得更加坚强和成熟。当我们清理完上一段的障碍后…

数据治理实践——金融行业大数据治理的方向与实践

目录 一、证券数据治理服务化背景 1.1 金融数据治理发展趋势 1.2 证券行业数据治理建设背景 1.3 证券行业数据治理目标 1.4 证券行业数据治理痛点 二、证券数据治理服务化实践 2.1 国信证券数据治理建设框架 2.2 国信证券数据治理建设思路 2.3 数据模型管理 2.4 数据…

【数据分析】专栏文章索引

为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 数据分析 目录&#xff1a; &#xff08;一&#xff09;数据分析介绍 &#xff08;二&#xff09;环境搭建 &#xff08;三&#xff09;matploatlib绘图 &#xff08;四&#xff09;numpy &…

VC#office ppt调用

1.打开VC#,建立控制台程序 2.引用MSOffice PPT引用 3. 主程序中引用ppt using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using MSPPT Microsoft.Office.Interop.PowerPoint;//using WPSPPT PowerPoint;n…

美摄科技对抗网络数字人解决方案

在数字化浪潮的推动下&#xff0c;企业对于高效、创新且具备高度真实感的数字化解决方案的需求日益迫切。美摄科技凭借其在人工智能和计算机视觉领域的深厚积累&#xff0c;推出了一款全新的对抗网络数字人解决方案&#xff0c;该方案能够为企业构建出表情和动作都极为逼真的数…

【智慧公寓】东胜物联嵌入式硬件解决方案,为智慧公寓解决方案商降本增效,更快实现产品规模化生产

方案背景 东胜物联本次服务的客户是一家专注于提供智慧公寓解决方案的欧洲企业&#xff0c;该公司旨在为用户提供智能&#xff0c;便捷&#xff0c;安全的生活体验。其解决方案涵盖智慧公寓控制、自动化、能源管理和智能建筑&#xff0c;它的使命是通过复杂的控制系统使用户能…

20240309web前端_第一周作业_豆瓣电影

作业四&#xff1a;豆瓣电影 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0…

开发指南006-后端配置文件

后端配置文件分为两层&#xff0c;一是部署目录中的内容如下&#xff1a; 这里最重要的是端口号&#xff0c;同一个目录下可以是一个jar包多个配置文件&#xff0c;启动批处理中&#xff0c;按一个配置文件启动一个程序的方式启动多个服务。例如上面目录里的启动批处理文件可以…

【鸿蒙 HarmonyOS 4.0】通知

一、介绍 通知旨在让用户以合适的方式及时获得有用的新消息&#xff0c;帮助用户高效地处理任务。应用可以通过通知接口发送通知消息&#xff0c;用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用&#xff0c;通知主要有以下使用场景&#xff1a; 显示接…

用眼精星票证识别系统,轻松将户口本转成结构化Excel

眼精星票证识别系统是一款革命性的软件&#xff0c;它以高度的精准性和效率为特点&#xff0c;为用户提供了一个简单便捷的工具&#xff0c;将纸质户口本转化为结构化数据。这一创新技术不仅改变了传统数据录入的方式&#xff0c;还大大提高了工作效率&#xff0c;为用户节省了…

[iOS]高版本MacOS运行低版本Xcode

Xcode 版本支持文档 目的&#xff1a; 在MacOS Sonoma 系统上安装 Xcode14.3.1 第一步 先在Xcode下载一个Xcode14.3.1的压缩包 第二步 本地解压Xcode&#xff0c;将外层目录名变更为Xcode_14.3.1&#xff0c;将文件拷贝到 /Applications目录下。 第三步 变更xcode-sel…

PostgreSQL索引篇 | Hash索引

PostgreSQL版本为8.4.1 &#xff08;本文为《PostgreSQL数据库内核分析》一书的总结笔记&#xff0c;需要电子版的可私信我&#xff09; 索引篇&#xff1a; PostgreSQL索引篇 | BTreePostgreSQL索引篇 | GIN索引PostgreSQL索引篇 | Gist索引PostgreSQL索引篇 | TSearch2 全文…