指针和数组笔试题解析【下篇】

本文涉及的产品
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
简介: 指针和数组笔试题解析【下篇】

👁️6.指针笔试题

👀6.1.试题(1)

💡下面代码输出的结果是什么?

int main()
{
  int a[5] = { 1,2,3,4,5 };
  int* ptr = (int*)(&a + 1);
  printf("%d,%d", *(a + 1), *(ptr - 1));
  return 0;
}

c28d9e77b94c4797a00eac30cdf7812d.png

3ccedd9982e044ba9b03bf5994a32e7f.png


👀6.2.试题(2)

💡假设p的值为0x100000 如下表达式的值分别为多少?

struct Test
{
  int Num;
  char* pcName;
  short sDate;
  char cha[2];
  short sBa[4];
}*p;
//假设p的值为0x100000  如下表达式的值分别为多少?
//已知,结构体Test类型的变量大小是20个字节
int main()
{
  p = (struct Test*)0x100000;
  printf("%p\n", p + 0x1);
  printf("%p\n", (unsigned long)p + 0x1);
  printf("%p\n", (unsigned int*)p + 0x1);
  return 0;
}

🔴(1)这里因为 p 是结构体类型+1,+1跳过20个字节,因此结果为0x100014(十六进制)

🔴(2)这里 p 被强制类型转换为整型,所以 p+1 就是整型+1,因此结果为0x100001

🔴(3)这里 p 被强制类型转换为整型指针,所以 p+1 跳过4个字节,因此结果为0x100004

13a96039262947248d7e0ff7184eca1c.png

👀6.3.试题(3)

💡下面代码输出的结果是什么?

int main()
{
  int a[4] = {1,2,3,4};
  int* ptr1 = (int*)(&a + 1);
  int* ptr2 = (int*)((int)a + 1);
  printf("%x,%x", ptr1[-1], *ptr2);
  return 0;
}

17f751d61eb642b284cd3d440075fc4c.png

👀6.4.试题(4)

💡下面代码输出的结果是什么?

int main()
{
  int a[3][2] = { (0,1),(2,3),(4,5) };
  int* p;
  p = a[0];
  printf("%d",p[0]);
  return 0;
}

🔴这里一不小心就可能上当掉坑里‼️

这道题如果真正定义二维数组的话应该是这样:int a[3][2] = { {0,1},{2,3},{4,5} };

而这道题考察的是逗号表达式,里面不是 {} 而是 ()

672fad79940c4ca4a596efa205146eff.png🔴a[0] 是二维数组第一行的数组名

🔴对 a[0] 这个数组名没有&,也没有单独的sizeof

🔴所以 a[0] 这个数组名表示数组首元素地址,即 a[0][0] 的地址

🔴a[0] —> &a[0][0]

🔴p[0] —> * (p+0) —>* p

f4d39766fec14935b96f97433d97eeaf.png


👀6.5.试题(5)

💡下面代码输出的结果是什么?

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

a5321c89e27c4e32a4a3af7ad092c554.png

🔴-4
10000000000000000000000000000100 -- 原码
11111111111111111111111111111011 -- 反码
11111111111111111111111111111100 -- 补码
0x FF FF FF FC

31681b35653f4e3389944d203570461e.png

👀6.6.试题(6)

💡下面代码输出的结果是什么?

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

🔴根据以上几道题可以自己思考一下,这道题比较简单🥰

0f27306281ba49f0b544d09f92e9f82a.png

👀6.7.试题(7)

💡下面代码输出的结果是什么?

int main()
{
  char* a[] = { "work","at","alibaba" };
  char** pa = a;
  pa++;
  printf("%s\n", *pa);
  return 0;
}

11543da99d3d47b8b59b75afb096e7c6.png

8fa6ebffcc81478e9e109330bc905dc6.png

👀6.8.试题(8)

💡下面代码输出的结果是什么?

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

8cd56cb042d84f7da79d525526169383.png

d0b314dade1f45aeb6ea1e164ff40799.png

0c7effe58ea040af9341d83172c1d51f.png🔴这道题比较有难度,如果这道题可以完全理解,那么说明对于指针的学习还是不错的🥳

🔴一定要自己独立画图理解‼️

🥰今天的内容比较有难度,希望烙铁们能够理解欧‼️🥰

目录
相关文章
|
2月前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
14天前
|
SQL 存储 算法
【数据挖掘】恒生金融有限公司2023届秋招数据ETL工程师笔试题解析
恒生科技2022年9月24号数据ETL工程师岗位的笔试题目及答案汇总,包括了SQL选择题、SQL编程题和业务应用SQL编程题,涵盖了数据库基础知识、SQL语句编写以及数据仓库概念等多个方面。
30 2
【数据挖掘】恒生金融有限公司2023届秋招数据ETL工程师笔试题解析
|
14天前
|
机器学习/深度学习 自然语言处理 算法
【数据挖掘】2020奇安信秋招算法方向试卷1 笔试题解析
2020年奇安信秋招算法方向试卷1的题目解析,覆盖了数据结构、机器学习、深度学习、自然语言处理、排序算法、激活函数、主题模型、采样方法、图像处理等多个领域的知识点。
34 1
【数据挖掘】2020奇安信秋招算法方向试卷1 笔试题解析
|
14天前
|
机器学习/深度学习 存储 算法
【数据挖掘】2020奇安信秋招算法方向试卷3 笔试题解析
2020年奇安信秋招算法方向试卷3的题目解析,涵盖了数据结构、机器学习、深度学习、自然语言处理、排序算法、激活函数、PCA、词嵌入库等多个领域的知识点。
26 1
【数据挖掘】2020奇安信秋招算法方向试卷3 笔试题解析
|
2月前
|
存储 算法 搜索推荐
深入解析String数组的操作与性能优化策略
深入解析String数组的操作与性能优化策略
|
2月前
|
存储 C++
有关【指针运算】的经典笔试题
有关【指针运算】的经典笔试题
19 4
|
1月前
|
存储 算法 搜索推荐
深入解析String数组的操作与性能优化策略
深入解析String数组的操作与性能优化策略
|
2月前
|
C++ 存储 Java
C++ 引用和指针:内存地址、创建方法及应用解析
'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。 ```
|
2月前
|
存储 JavaScript 前端开发
JavaScript——JavaScript基础:数组 | JavaScript函数:使用、作用域、函数表达式、预解析
在JavaScript中,内嵌函数可以访问定义在外层函数中的所有变量和函数,并包括其外层函数能访问的所有变量和函数。①全局变量:不在任何函数内声明的变量(显式定义)或在函数内省略var声明的变量(隐式定义)都称为全局变量,它在同一个页面文件中的所有脚本内都可以使用。函数表达式与函数声明的定义方式几乎相同,不同的是函数表达式的定义必须在调用前,而函数声明的方式则不限制声明与调用的顺序。③块级变量:ES 6提供的let关键字声明的变量称为块级变量,仅在“{}”中间有效,如if、for或while语句等。
42 0
|
2月前
|
JSON 资源调度 Kubernetes
实时计算 Flink版操作报错合集之解析JSON数组时,遇到报错,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。

热门文章

最新文章

推荐镜像

更多