[关闭]
@Purpose 2017-03-12T08:08:23.000000Z 字数 1182 阅读 975

计科的课

蛋协


Q1传递数组可以直接修改数组的值

此处输入图片的描述
程序会输出什么呢?
A:
abc\0
ab1\0
分析:
a[4]="abc\0",调用change函数后,a[4]="ab1\0"

IMA-硬件-宏鑫 2016/8/25 14:57:29
因为以数组为参数实际传递的是数组的指针
IMA-硬件-宏鑫 2016/8/25 14:57:47
那依照指针的特性,你就可以直接修改数组的值

这说明传递数组可以直接修改数组的值
就是因为这个才产生了一下午的讨论……

Q2 %s可以直接输出字符数组的全部吗?

16-软工-eggs
%s可以直接输出字符数组的全部吗?
16-计科
@16-软工-eggs 我给你举个例子。
此处输入图片的描述

A:
%s不能够说是输出字符数组的全部,而是输出字符数组从下标0(如a[0]),到数组中\0的部分。

Q3 如果没有\0……

此处输入图片的描述
A:

这个程序先给a赋值了abctqwe,这时候我们可以知道a的长度是8(也就是a[0]~a7,a数组的内容为abctqwe\0PS:只有在char数组用""赋值的时候,系统会帮你自动加上哦。),此时a[7]\0,然后我给a[7]赋值成a,a数组此时没有\0%sa[0]读到a[7],发现还没有发现\0,就继续往后读,读到a数组后面,终于在某一处发现了\0,结束了输出。但是某一处是我们不确定的,以为a数组周围都是一些未初始化的内存,你不知道某个位置的内存里的数字是什么,所以这串代码,每次输出的值是不一样的

Q4 \0是否占数组长度

此处输入图片的描述
A:
程序会输出6
因为系统会在char数组用""赋值的时候自动添加\0
\0也占数组长度的

Q5 \0后有数字如何处理

此处输入图片的描述
A:
此处输入图片的描述
这里有两个要注意的
首先,当\041,这种数字出现的时候,他会OCT(041)=DEC(33)DEC()就十进制,OCT就是八进制。而这个数字对应着ASCII表
此处输入图片的描述
所以它输出的就会是,而不是到\0就终止,也不是输出\041,也不是输出ASCII表中041所代表的
为什么要用我的名字……脸黑
因为是你讲的进制转换啊。


在这里\后面的数字是以八进制读取的,然而如果后面的数字里有8
那么它还是会终止,因为八进制里没有8,就如同十进制中没有10一样

此处输入图片的描述

16-计科
当\081,这肯定不是一个八进制数,那么他读取只会读取到\0,\0的结果你们是知道的

如果你想以十六进制输入,那么你就要用\x而不是\0x
此处输入图片的描述

6-软工-eggs
为什么不是0x
16-计科
@16-软工-eggs 这是标准问题,我也没办法讲了。

IMA-硬件-宏鑫
这个故事教导我们以后讲课得确保内容自己真正掌握了,不然将来就被别人翻出来了
IMA-硬件-宏鑫
所以嘛,你们现在可能觉得这些进制转换没什么卵用,但是将来如果你们在扣内存的每一位状态的时候就很有用了,

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注