指针和数组相关习题

我们学完了指针和数组,现在做些习题巩固下自己:

1.&数组名和数组名的区别:

2.结构体指针:


注:结构体指针p:p+1指加20,20的十六进制为14;

只有指针类型的变量+1等于加其所指类型的大小 ,除此之外+1为正常的加1。所以,(unsigned long)+1就是简单加1。

3.将变量字节化:


画图解释为:


4:逗号表达式:

首先,逗号表达式是指,以( )括着,中间以逗号隔开的表达式。形如(x,y)=y,即以最右边值为结果。如(1+2,3+2)值为5。

请看下列代码:


5.二维数组:


解释如下:


注:1.二维数组当做一维数组画图处理;

2.指针相减指指针之间经历元素个数,&p[4][2]和&a[4][2]经历4个元素,相减%d为-4;

3.%p是无符号整数,存取涉及原码补码:

-4原码:10000000 00000000 00000000 00000100

  反码: 11111111 11111111 11111111 11111011

补码:   11111111 11111111 11111111 11111100 为FFFFFFFC

6.二维数组中&数组名和数组名:


注:二维数组中&a指整个数组,&a+1指下个数组地址,a+1指第二行(从6开始为第二行)地址。

7.解释下列代码:

(*(void (*)( ) )0)( );----->void (*)( )是函数指针---->(void (*)( ) )0 是指针将0号地址强转为函数指针---->(*(void (*)( ) )0)是解引用,将4个字节内容拿出---->(*(void (*)( ) )0)( )指调用0号地址所对应的函数。

void (*fun(int,void(*)(int) ) )(int);简化为:

typedef   void(*p_fun)int;

p_fun    fun(int,void(*)(int) ) ; 

fun(int,void(*)(int) ) fun函数两个参数,一个类型为int,一个是函数指针;

void (*fun(int,void(*)(int) ) )(int)指fun函数返回值是函数指针。

8.指针数组:


画图解释如下:


9:较复杂一个题:


画图解释如下:


printf("%s\n", **++cpp);画图如下:


注意:++cpp为前置加加,cpp也要加1。所以printf("%s\n", **++cpp)结果为“POINT”

printf("%s\n", *--*++cpp + 3);画图解释如下:



printf("%s\n", *--*++cpp + 3)结果为:“ER”

printf("%s\n", *cpp[-2] + 3);画图如下:


所以printf("%s\n", *cpp[-2] + 3)结果为:“ST”

printf("%s\n", cpp[-1][-1] + 1);画图如下:


所以,printf("%s\n", cpp[-1][-1] + 1)结果为:“EW”

对于这个题,重要的是将图画好,思路清晰。




 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值