“指针”难易题型

原创 2017年10月06日 12:52:13

1.写出下列程序的输出结果:

int main()
{
   int arr[5]={1,2,3,4,5};
   int *ptr=(int*)(&arr+1);//取出数组arr的地址,加1表示跳过整个数组,ptr指向的是5后面的地址
   printf("%d %d\n",*(arr+1),*(ptr-1));
   //*(arr+1)表示取出数组arr的首地址,加1表示指向第二个元素
   return 0;
}

这里写图片描述

2.写出下列程序的输出结果:

int main()
{
    int arr[4]={1,2,3,4};
    int *ptr1=(int *)(&arr+1);
    int *ptr2=(int *)((int)arr+1);//arr为数组首元素地址,强制类型转换为int,加1表示加4个字节
    printf("%x,%x",ptr1[-1],*ptr2);//ptr1[-1]=*ptr1+(-1),向前移动四个字节
}

这里写图片描述

ptr1[-1]的十六进制输出是4;*ptr2的十六进制输出是2000000。

3.下面代码输出什么?

int main()
{
    int a[5][5];
    int (*p)[4];//数组指针(定义了p[0],p[1],p[2],p[3]四个指针,本质还是数组)
    p=a;//从同一地址处开始
    printf("%d\n",&p[4][2]-&a[4][2]);
    return 0;
}

这里写图片描述

由图知&p[4][2]和&a[4][2]差四。

4.下面代码输出结果是什么?

#include <stdio.h>  
struct Test  
{  
    int Num;  
    char *pcName;  
    short sDate;  
    char cha[2];  
    short sBa[4];  
}*p;  
int main()  
{  
    p = 0x100000;  
    printf("%p\n", p + 0x1);  //p是一个指向结构体的指针,加1就意味着跳过整个结构体
    printf("%p\n", (unsigned long)p + 0x1);  //p强制类型转化为无符号长整型,加1直接加
    printf("%p\n", (unsigned int*)p + 0x1);  //p指向无符号整型的指针,加一跳过四个字节
    return 0; 
}  

结构体Test的大小为20.
这里写图片描述

p + 0x1=0x100014;
(unsigned long)p + 0x1=0x100001;
(unsigned int*)p + 0x1)=0x100004.

5.这道题比较复杂,逻辑性较强。

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

将本题题干进行画图总结:

这里写图片描述

接下来一句一句画图就不会迷路喽!!

**++cpp

这里写图片描述

cpp原先指向的是cp的第一个元素c+3,++cpp指向cp的第二个元素c+2,解引用得到cp第二个元素,再解引用得到cp的第二个元素指向的内容–POINT

*--*++cpp + 3

这里写图片描述

上一句的++cpp的作用延续到这句,所以这次++cpp指向的是cp的第三个元素c+1,解引用得到c+1的内容,然后进行自减,解引用之后得到c的第一个元素–ENTER,加3之后指向E(第二个),输出–ER.

*cpp[-2] + 3

这里写图片描述

*cpp[-2] + 3 = **(cpp+(-2))+3 上述自增效果延续,cpp+(-2)指向cp的c+3,双重解引用之后得到FIRST,加3之后输出–ST.

cpp[-1][-1] + 1

这里写图片描述

cpp[1][-1] + 1 =*(*(cpp-1)-1) + 1 第三句没有cpp的自增自减,所以延续的是第二句的cpp的位置,*(cpp-1)之后指向cp的c+2,再减一就指向c的c+1,加3指向E,输出EW.

版权声明:本文为博主原创文章,未经博主允许不得转载。

Leetcode题目分类:类型+难易

=== 十月十五日更 === 题已刷完,这篇总结还落下不少进度。这个网站本属于个人博客,以后我不想把刷题这种纯找工作的文章发在这里。另外,我回头审视了以前写的一些题解,发现还有不少提升空间,包括...
  • u011487593
  • u011487593
  • 2015年04月15日 16:16
  • 1403

POJ 难度及题型题目分类

OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期:...
  • u010871244
  • u010871244
  • 2013年07月16日 10:34
  • 1997

ActiveMQ概念和实际开发

ActiveMQ原理介绍 上面网址为ActiveMQ相关的原理介绍,仔细看完后大概总结一下: 1.由消息队列、发送者、接受者等组成 2.异步性质,消息存放在队列中等待存取,可以设置监听处理消息达到之后...
  • gengyazhou123
  • gengyazhou123
  • 2016年11月26日 15:52
  • 218

关于ACM竞赛的题型分析

一、ACM竞赛介绍及规则 参赛队员可以携带诸如书、手册、程序清单等参考资料,试题的解答提交裁判称为运行,每一次运行会被判为正确或者错误,判决结果会及时通知参赛队伍,正确解答中等数量及...
  • makewei13
  • makewei13
  • 2015年12月05日 15:52
  • 1242

面试常见题型总结

1、heap 与stack 的差别  (1)申请方式不同  stack有系统分配、heap由程序员申请(malloc/ new)  (2)申请后系统响应        stack:只要栈中剩余空间大于...
  • t1234xy4
  • t1234xy4
  • 2016年08月03日 17:11
  • 278

面试常问题型

1:数组去重3种方法: (1) Array.prototype.unique = function (arr){ var newArr = []; var item ; for(var i ...
  • aliujiujiang
  • aliujiujiang
  • 2018年01月20日 23:25
  • 29

天下事有难易乎?

今天又收到两条短信:一个让我汇款,一个是说可以克隆别人的手机卡 举报无门,难道不能给我一个畅快的投诉渠道么?作为一个守法公民想为社会做点事,没有渠道。只能看更多的人受害了。 谁的责任?只能说天朝V5啊...
  • zhangjianyu
  • zhangjianyu
  • 2010年12月07日 13:36
  • 369

笔试里经常考到的字符串操作(一)

笔试里经常考到的字符串操作子字符串提取语法 str.substring(int beginIndex) beginIndex表示从某一处索引开始截取一直到字符串结束 str.substring(i...
  • applecomb
  • applecomb
  • 2016年12月08日 21:40
  • 46

数据库中几种常见的题型

--统计本班的平均成绩,如果平均分在70分以上,则显示“成绩优秀”,并显示出最好成绩及学员姓名,如果在70分以下则显示“成绩较差”,并显示出最差成绩及学员姓名。declare @score intse...
  • wangwuao
  • wangwuao
  • 2011年03月14日 20:15
  • 334

动态规划-经典题型

最少找零数 给定面值为v[0], v[1]…v[n-1]元的硬币若干,如何用最少的硬币凑够total元? 状态:dp[i]表示凑够 i 元需要的最少硬币数状态转移方程:dp[i] = min { ...
  • lecholin
  • lecholin
  • 2017年07月01日 10:11
  • 145
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:“指针”难易题型
举报原因:
原因补充:

(最多只允许输入30个字)