几道指针运算相关的笔试题

今天来分享几道和指针运算相关的笔试题目

题目一:

  解析:&a(&数组名)取出的是整个数组的地址,&(a+1)强制转化成int*类型赋给指针变量ptr1

12345

            &(a+1)跳过整个数组,由于指针变量ptr是int型,因此减一跳过1个整型,

            指向5,解引用              得到整形数据5。

            a是数组名,数组名表示数组首元素的地址,a数组的元素是int型,+1跳

            过一个字节,指向 2,*(a+1)获得整型数据2。

题目二:

本题容易错误的将数组1中的6个元素理解成0,1,2,3,4,5,6

想要正确解决这个问题,需要理解逗号表达式,逗号表达式的结果为最后一个逗号后面的内容,

因此本题目给数组a前三个元素赋值分别为:1,3,5.。为不完全初始化,其余元素自动赋值为0.

a【0】是二维数组a第一行的数组名,是第一行首元素1的地址(即a【1】【1】的地址),符给整型指针变量p,p【0】等价于*(p+0),即对p解引用得到a【0】【0】,所以本体最终答案为1.

题目三:

解析:本题目aa是一个二维数组数组名,&aa得到的是二维数组的地址,+1跳过整个二维数组,强制转化为int*类型赋给整形指针变量ptr1,ptr1-1跳过一个整型指向10,解引用后得到整形数据10.

aa是二维数组的数组名,数组名表示数组首元素的地址,即二维数组第一维的地址,+1得到第二维的地址*(aa+1)等价于aa【1】,是二维数组第二维的数组名,数组名表示数组首元素的地址,即aa【1】【0】的地址,强制转化为int*类型赋给整形指针变量ptr2,ptr2-1跳过一个整型指向5,解引用后得到整型数据5.

题目四:

解析:本题目考察指针-指针的运算(结果是指针和指针之间的元素个数)

a是二维数组的数组名,a表示二维数组第一维(行)的地址,类型为int(*p)[5],将它赋给p

p+1跳过4个整型。(p是一个数组指针,这个指针指向的数组有4个int类型的元素)。

详解见下图所示————

要注意,-4以%p的形式打印要先找到-4在内存中的补码形式。

题目五:

解析:a【】是一个存放指针的数组,a【0】a【1】和a【2】分别被赋予了work\0  at\0  alibaba\0的首元素地址即(a【0】a【1】和a【2】分别指向了work\0  at\0  alibaba\0的首元素)pa是一个二级指针,用来存放一级指针的地址。a是指针数组的数组名,数组名表示数组首元素的地址,将a赋给pa,pa指向a【0】,pa+1,跳过一个char类型指向a【1】,解引用后访问a【1】的内容,即at\0中a的地址,根据地址以%s的形式打印出at。

题目六:

本题目主要考察二级指针三级指针之间的关系。

 题目七:

本题考查指针+1的运算,指针+1跳过多少字节取决于类型,解析请见上图,注:地址在X86环境下

占4个字节,以16进制打印最终有8位,所以最终结果为:0x00100014     0x00100004    0x00100001.

以上就是指针相关的七道笔试题的分享——————

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值