指针(5)(含大量题目)

 sizeof和strlen对比

指针(5)(含大量题目)_第1张图片

以上内容太过简单,之前都了解过。所以不讲以上东西,你们看一下就行

只是要额外多说两点。

1.  sizeof除了操作数是类型,其他为操作数时都可以不用括号。就只有类型为操作数时必须要括号。这是硬性语法规定

2.  sizeof里面如果有表达式的话,表达式不执行。

 数组和指针笔试题解析

题目一,二

指针(5)(含大量题目)_第2张图片两个都太过简单,不过多叙述

题目三 

指针(5)(含大量题目)_第3张图片

第一行第二行为随机值 ,很简单不叙述。

第三行操作数是*arr ,为字符,因为会强制转化为地址,所以为000000097地址,这地址为计算机不可使用地址,使用了程序就崩了。

第四行同理

第五行形参是为地址跟第一行的值一样,但类型为整个数组。char  (*)[5]能隐式转换为 char *,char*再隐式转换为const char *。(char (*)[5]能隐式转换为 const char *,分两步更好理解)。

  所以我们这能得出char数组指针能隐式转换为char指针。对于其他类型也相同,前提是两者基本类型要相同,都要为char。 至于无const隐式转换为有const,我们都知道。

第六行同理 ,虽然最终类型相同,但地址值不同,为随机值,但比第一行的随机值少6

第七行同理,为随机值,比第一行的随机值少1

题目四

指针(5)(含大量题目)_第4张图片

与题目三差不多,只是不是随机值,第三个第四个由于强制转化地址,所以为0000000096地址,该地址为计算机内不可使用地址,使用这类地址程序会报错。而其他的是同样的道理跟题目三一样,只是多了个\0导致结果有差异

题目五 ,六

指针(5)(含大量题目)_第5张图片

指针(5)(含大量题目)_第6张图片 很简单,没什么好讲的。

 题目七

指针(5)(含大量题目)_第7张图片

除了第五个和第六个其他都讲过,第五个第六个是因为他们&p为二级指针,所以并不在字符串所在的内存位置,所以遇到\0是随机的,为随机值。

题目八 

 除了最后一个都没什么好说的。

最后一个并不会出现越界访问,因为sizeof里面的表达式不会执行,所以不执行就不会出现越界访问。而且在运行前sizeof就已经确定好了大小(计算机模拟确定,不执行里面的操作,但模拟出最终的空间大小,作者的个人理解)所以模拟的最终空间为16,结果为16。

 指针运算笔试题解析 

 第一题

指针(5)(含大量题目)_第8张图片 很简单,不过多叙述

第二题 

 指针(5)(含大量题目)_第9张图片

很简单,没什么好说的。但我们要说一些额外的点。 

 地址都是以十六进制去表示的,所以%p(表现出地址)表示的也是十六进制的数(其值为放在内存中的值,也就是补码),且必须是八个整数或十六个整数(按照环境来定)符合地址的格式。

第三题

指针(5)(含大量题目)_第10张图片 该题虽然很简单,但有很容易忽略的点

就是在自定义时有逗号表达式( 逗号表达式就是,和()结合在一起,最终()里面的结果是最后的,右边的值)

所以这初始化是未完全初始化,只初始化了前三个1,3,5,如果要全部初始化,就要除去逗号表达式,把括号改成大括号{}。

该题结果为1.

第四题 

 指针(5)(含大量题目)_第11张图片

 

该题我认为难点在于 %p 和%d的本质区别,%p是把数据以存放在内存中的形式(补码)转化为地址的形式用十六进制打印出来,%d是用原码打印出来十进制整数。

结果如上。证明了我的想法。 

第五题 

指针(5)(含大量题目)_第12张图片 该题很简单,一个为10,一个为5.

第六题 

指针(5)(含大量题目)_第13张图片

 其实不难,但这里还要额外说的一点还是%s的占位符本质。

%s比较特殊其输出字符串,对应的参数需要是字符串的地址(指针),从而最终打印其参数地址所指向的内容一直到\0之前的一个字符。这是其作用本质。

所以该题结果为打印at 

第七题 

指针(5)(含大量题目)_第14张图片 这题相比其他题难度有所提升(可以说最难),需要画图才能分析清楚。

指针(5)(含大量题目)_第15张图片

有了这图,就容易推出来结果。

我就不推了给了图你们自己推一下,有了图简单多了。结果如下。

指针(5)(含大量题目)_第16张图片 。

总结 

指针5基本上都是题目,在做题目时我们还总结了一些知识点,比如知道了多个占位符的作用,%s,%p,%x,%d到底本质是怎么作用的。还又了解了一些隐式转换。

除此之外还通过这些题目进一步提高了我们的思维能力。

所以指针(5)就到这里了。指针这一大篇就通过五大节结束了。 

我们之后学习字符函数和字符串函数。

你可能感兴趣的:(c语言知识点专栏,c语言题目练习,数据结构)