第一题:、

(&a)就得到了一个int(*)[5]这样的一个数组指针。再+1就跳过了整个数组,指向了5后面的那个位置。

*(a+1)=a[1]=2;   *(ptr-1)=跳一个元素指向5

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

第二题:

1.指针+1就跳过一个元素,当前的一个元素就是一个结构体。一个结构体20个字节,转换成16进制就是14    0x100014

2.本来p是struct Test*,但是把整个结构体指针强转成了(unsigned long)p,转成了整数,整数+1,就是单纯的整数+1了

3.转成了int*类型,再+1就跳过了一个元素+4

struct Test
{int Num;char* pcName;short sDate;char cha[2];short sBa[4];
}*p = (struct Test*)0x100000;int main(){printf("%p\n", p + 0x1);printf("%p\n", (unsigned long)p + 0x1);printf("%p\n", (unsigned int*)p + 0x1);

第三题:

&a得到了一个int(*)[4],数组指针进行+1操作的话,跳过整个数组元素,指向4后面的位置。

a是数组名,强制类型转换(int),得到的还是a这个数组的首元素地址(int),随后的+1,就是int+1;

(int)a就是先隐式类型转换成了指向数组首元素的(int*)a,再强转成了int

1是一个int里面包含了四个字节,假设a是0x100,a+1就是0x101;

ptr1[-1]就是 *(ptr1-1);就是4

解引用操作:

1.根据里面存的地址,找到相对应的内存。

2.根据指针的类型,决定找多大的空间。

*ptr2

1和2在具体的内存中是如何储存的?

00 00 00 01,因为字节序的问题,01 00 00 00.    00 00 00 02   02 00 00 00

一个int四个字节,从0x101开始找四个字节,就找到了1这个元素的后三个字节和2这个元素的第一个字节,00 00 00 02,2000000

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)

第四题:

逗号表达式,最终的值,就是最后一个逗号后面的值。故下面的代码中,最终有效的数就是

1,3,5;

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

1

第五题:

这个赋值操作本身就是不科学的(int(*)[4]和int(*)[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]);

十进制是:&p[4][2]-&a[4][2]=-4

1000 0000 0000 0000 0000 0000 0000 0100源码

1111 1111 1111 1111 1111 1111 1111 1011反码

1111 1111 1111 1111 1111 1111 1111 1100反码+1=补码

F       F      F      F      F      F      F       C

十六进制是:FFFFFFFC

指针相减:就是计算两个指针之间隔了几个元素!

第六题:

(&aa+1)=>int(*)[2][5];指向二维数组的数组指针;指向10后面的位置;

*(aa+1)=aa[1];指向第二行的首元素地址。

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

第七题:

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

第八题:

cpp:0x2000

++cpp:0x2004

*++cpp:0x1008

**++cpp:0x300

%s:打印字符串,0x300对应的是POINT

现在cpp已经是0x2004

++cpp:0x2008

*++cpp:0x1004

--0x1004:0x1000

*0x1000:0x100

0x100+3:由于0x100是char*,0x103开始打印一直到\0

ER

ENTER

现在cpp是0x2008了

cpp[-2]就是(0x2008-2)然后解引用

0x2008-2=>0x2000

*0x2000=0x100c

*0x100c=0x400

0x400+3=由于0x400是char*,0x403开始打印一直到\0

​​​ST

FIRST

现在的cpp是0x2008

cpp[-1]=0x2004再解引用0x1008

0x1008[-1]

0x1004再解引用0x200

0x200+1=0x201

EW

NEW

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

C语言---指针笔试题相关推荐

  1. 【维生素C语言】练习:画图解析C语言指针笔试题

    原标题:" 祖安猎码人"在线手撕代码画图解析[C指针笔试题] 前言: C语言指针笔试题,建议做完后再看答案.本篇博客有详细的解析部分,对每一道题进行深度的画图解析.如果你想复习下指 ...

  2. 八道C语言指针笔试题——拿捏指针

    第一题 //请问输出什么? #include <stdio.h> int main() {int a[5] = { 1, 2, 3, 4, 5 };int* ptr = (int*)(&a ...

  3. 【C语言】大厂指针笔试题(1码+1图)详解——程序结果判断题

    C指针相关系列 1.一篇就够了(建议收藏)--超详解sizeof与strlen的用法 2.C语言之深入指针进阶(建议收藏以备不时之需) 3.回炉重造的C之指针+结构体 [C语言]大厂指针笔试题详解(1 ...

  4. 这八道经典指针笔试题你都会做嘛?

    本文详细介绍了八大指针经典笔试题,内涵盖指针大部分的用法, 全部了解掌握其原理之后对指针的学习大有帮助!!! 对指针掌握 也就掌握了内存,C语言也就没有什么更绕的了 详解八道经典指针笔试题 一.八道经 ...

  5. 指针笔试题及其解析、字符串左旋、字符串追加strcat

    笔试题1 #include <stdio.h>int main() {int a[4] = { 1, 2, 3, 4 };int* ptr1 = (int*)(&a + 1);in ...

  6. 【C语言】八道经典指针笔试题(详解)

    目录 需要用到语法 笔试题1: 解析: 笔试题2: 解析: 总结: 笔试题3: 解析: 笔试题4: 解析: 笔试题5: 解析: 笔试题6: 解析: 笔试题7: 解析: 笔试题8: 解析: 总结: C语 ...

  7. 进阶C语言:指针笔试题

    在学习完进阶C指针之后,可以来做一些笔试题来进行提升.巩固,小编在这里给大家分享几道比较有意思的笔试题 目录 一.笔试题1: 二.笔试题2 三.笔试题3: 四.笔试题4: 五.笔试题5: ​编辑 六. ...

  8. 指针笔试题详细介绍,让你不再惧怕指针【c语言】

    int main() {int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1); //&a+1的类型是int( * )[5]pr ...

  9. 4道经典指针笔试题讲解 ~

最新文章

  1. 超赞!YOLOv5的妙用:学习手语,帮助听力障碍群体
  2. Android SDK Manager国内下载缓慢的问题
  3. devi into python 笔记(一)字典 列表的简单操作
  4. JAVA 设计的七大原则
  5. BCB 编写 DLL 终极手册
  6. 详细分析Memcached缓存与Mongodb数据库的优点与作用
  7. LeetCode MySQL 1364. 顾客的可信联系人数量
  8. C语言方向键识别和字母识别,c语言中怎样输入和读取方向键
  9. 百万奖池大赛 | 交通事件、医学病理、违法广告检测等,2020首届江苏大数据开发与应用大赛启动...
  10. 计算机专业课程项目教学教学设计,高职旅游管理专业计算机课程项目化教学设计...
  11. String引起的OutOfMemory异常 + 如何计算C#对象所占内存的大小
  12. 温度传感器利用寄存器计算出温度值
  13. python2.7 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5
  14. eureka 注册中心高可用失败,没有互为副本
  15. 获取指定月份最后一天_Excel如何计算某个月的第1天和最后1天?
  16. 海康摄像头SDK跨平台通用解决方案
  17. 2018.9.13 贷款月供计算器
  18. WYB-7型水质自动取样器
  19. 海信85U7G-PRO怎么样 有什么优缺点
  20. 硬盘知识:硬盘中蓝盘、绿盘、黑盘、红盘有什么区别?

热门文章

  1. 理论+实操:华为isis
  2. gerrit 数据迁移_详解git仓库迁移的两种解决方案
  3. 【雕爷学编程】Arduino动手做(5)---热敏温度传感器模块
  4. Servlet 发送电子邮件
  5. 网易云音乐小程序案例分享 附完整代码
  6. 微信砍价活动的软件以及一篇微信砍价策划方案详解
  7. 学编程一年多少中学_我从一年的编码中学到了什么
  8. volatile关键字对编译器优化的影响
  9. 从零开始的计算机学习
  10. viper4android md,DCS F-16CM VIPER毒蛇 中文指南 14.2AN/ARC-164 UHF无线电