C语言深入理解指针六(19)


前言

  本篇都将是练习题,从而让你对指针的理解更上一层楼


一、sizeof & strlen

sizeof

 在学习操作符的时候,我们学习了sizeof、sizeof计算变量所占内存空间大小,单位是字节,如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小

sizeof只关注占用内存空间的大小,不在乎内存中存放什么数据
在这里插入图片描述

strlen

 strlen是C语言函数,功能是求字符串长度,函数原型如下:

size_t strlen (const char* str);

 统计的是从strlen函数的参数str中这个地址开始向后,\0之前字符串中字符的个数
 strlen函数会一直向后找\0字符,直到找到为止,所以可能存在越界查找
在这里插入图片描述

sizeof和strlen的对比

在这里插入图片描述

二、数组和指针笔试题解析

一维数组

在这里插入图片描述

你能说出它们的输出吗?

结果如下:
在这里插入图片描述

字符数组

在这里插入图片描述

请你继续说出它们的输出~

结果如下:
在这里插入图片描述

那接下来的这个呢,它们的输出又如何?
在这里插入图片描述
结果如下:
在这里插入图片描述

再看看这个:
在这里插入图片描述
结果如下:
在这里插入图片描述

继续:
在这里插入图片描述
结果如下:
在这里插入图片描述

再看看:
在这里插入图片描述
结果如下:
在这里插入图片描述

再看!:
在这里插入图片描述
结果如下:
在这里插入图片描述

二维数组

哈哈,还没结束呢!
请看:
在这里插入图片描述
结果如下:
在这里插入图片描述

三、指针运算笔试题解析

题目1

在这里插入图片描述
答案是 2 ,5,图片如下:

在这里插入图片描述

题目2

在这里插入图片描述
本题很有意思,把一个0x100000强制转换成地址赋值给p,然后再进行运算
本题其实考察的是指针 + 整数的意思

很显然:
第一个打印中,p被强制转换成无符号长整数,那也是整数,所以,第一个就是输出0x100001;
第二个打印中,p被强制转换成无符号整数指针,指针 + 1,就是跳过类型长度的字节数,所以输出0x100004

题目3

在这里插入图片描述
本题还是比较阴险的,注意大括号里面的是圆括号,这时候就要联想到逗号表达式

我们先来看看调试:
在这里插入图片描述
原来,我们像(0, 1)这样的式子,逗号表达式取后面的1,拿来给a初始化了,还是蛮有意思的

题目4

在这里插入图片描述

画图很重要,请认真画图!

 首先a的地址赋给p,无视警告,p指向的是四个元素的整型数组
 p先跳四次四格的int,再跳两次一个的,跳到如图的红色位置,这就是p[4][2],绿色部分就是a[4][2]
在这里插入图片描述

此时,我们还要想指针-指针得出来的是一个整数,而%p打印的是地址,把-4当成地址,也就是把内存中-4的补码以0x…形式打印出来
所以%p打印FFFFFFFC,%d打印原码-4

题目5

在这里插入图片描述
还是要常画图:
在这里插入图片描述
答案是 10,5

题目6

在这里插入图片描述在这里插入图片描述
这样就很显然了,答案是打印at

题目7

在这里插入图片描述
 初看下标-1,一开始可能会感到有些奇怪,其实之前也说过,下标访问符[ ]没那么神秘,arr[i]也就是*(arr + i)而已

 接着开始画图:
在这里插入图片描述
答案如下;
在这里插入图片描述
结束~


总结

  指针的教学到这里就结束了,但是指针的运用会贯穿我们之后整个的学习路程,大家要好好掌握!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值