C语言---指针笔试题
第一题:、
(&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语言---指针笔试题相关推荐
- 【维生素C语言】练习:画图解析C语言指针笔试题
原标题:" 祖安猎码人"在线手撕代码画图解析[C指针笔试题] 前言: C语言指针笔试题,建议做完后再看答案.本篇博客有详细的解析部分,对每一道题进行深度的画图解析.如果你想复习下指 ...
- 八道C语言指针笔试题——拿捏指针
第一题 //请问输出什么? #include <stdio.h> int main() {int a[5] = { 1, 2, 3, 4, 5 };int* ptr = (int*)(&a ...
- 【C语言】大厂指针笔试题(1码+1图)详解——程序结果判断题
C指针相关系列 1.一篇就够了(建议收藏)--超详解sizeof与strlen的用法 2.C语言之深入指针进阶(建议收藏以备不时之需) 3.回炉重造的C之指针+结构体 [C语言]大厂指针笔试题详解(1 ...
- 这八道经典指针笔试题你都会做嘛?
本文详细介绍了八大指针经典笔试题,内涵盖指针大部分的用法, 全部了解掌握其原理之后对指针的学习大有帮助!!! 对指针掌握 也就掌握了内存,C语言也就没有什么更绕的了 详解八道经典指针笔试题 一.八道经 ...
- 指针笔试题及其解析、字符串左旋、字符串追加strcat
笔试题1 #include <stdio.h>int main() {int a[4] = { 1, 2, 3, 4 };int* ptr1 = (int*)(&a + 1);in ...
- 【C语言】八道经典指针笔试题(详解)
目录 需要用到语法 笔试题1: 解析: 笔试题2: 解析: 总结: 笔试题3: 解析: 笔试题4: 解析: 笔试题5: 解析: 笔试题6: 解析: 笔试题7: 解析: 笔试题8: 解析: 总结: C语 ...
- 进阶C语言:指针笔试题
在学习完进阶C指针之后,可以来做一些笔试题来进行提升.巩固,小编在这里给大家分享几道比较有意思的笔试题 目录 一.笔试题1: 二.笔试题2 三.笔试题3: 四.笔试题4: 五.笔试题5: 编辑 六. ...
- 指针笔试题详细介绍,让你不再惧怕指针【c语言】
int main() {int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1); //&a+1的类型是int( * )[5]pr ...
- 4道经典指针笔试题讲解 ~
最新文章
- 超赞!YOLOv5的妙用:学习手语,帮助听力障碍群体
- Android SDK Manager国内下载缓慢的问题
- devi into python 笔记(一)字典 列表的简单操作
- JAVA 设计的七大原则
- BCB 编写 DLL 终极手册
- 详细分析Memcached缓存与Mongodb数据库的优点与作用
- LeetCode MySQL 1364. 顾客的可信联系人数量
- C语言方向键识别和字母识别,c语言中怎样输入和读取方向键
- 百万奖池大赛 | 交通事件、医学病理、违法广告检测等,2020首届江苏大数据开发与应用大赛启动...
- 计算机专业课程项目教学教学设计,高职旅游管理专业计算机课程项目化教学设计...
- String引起的OutOfMemory异常 + 如何计算C#对象所占内存的大小
- 温度传感器利用寄存器计算出温度值
- python2.7 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5
- eureka 注册中心高可用失败,没有互为副本
- 获取指定月份最后一天_Excel如何计算某个月的第1天和最后1天?
- 海康摄像头SDK跨平台通用解决方案
- 2018.9.13 贷款月供计算器
- WYB-7型水质自动取样器
- 海信85U7G-PRO怎么样 有什么优缺点
- 硬盘知识:硬盘中蓝盘、绿盘、黑盘、红盘有什么区别?