今天来分享几道和指针运算相关的笔试题目
题目一:
解析:&a(&数组名)取出的是整个数组的地址,&(a+1)强制转化成int*类型赋给指针变量ptr1
1 | 2 | 3 | 4 | 5 |
&(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.
以上就是指针相关的七道笔试题的分享——————
完