sizeof&&strlen
这是我本人的第一份博客,开始决定写的时候感觉像登山一样,好几次点开了界面想了想又直接关住。但真正写起来并不太难,甚至还有一种像洪水倾泻一样的畅快淋漓。
strlen
这里可以看出strlen()计算的是值的大小,而不是像sizeof()一样直接把括号里的东西转化成类型计算。
这是strlen和sizeof的不同。
如果是数字的话就只能在初始化时赋值了,而且是以字符串的形式。strlen 没法以数组形式赋值和初始化。
sizeof
首先,不知为何我在创建数组初始化之后,无法对没有规定大小却赋了值的数组进行计算,所以我只能在初始化时赋值。(下面的输出行我打错了,见谅见谅~)
这里数组得出的值正好是36(9*4),但如果是字符串就不一样了。
为什么是7呢,我明明输入的字符串里只有6个字母,不应该是6(6*1)吗?
其实字符串的结尾还有个 ‘\0’ 我们看不见,但是却存在。
这个 ‘\0’ 不仅看不见,还占了储存空间。
(在这里声明一下,数组结束时没有结束符,可以理解为后面全为null)
而字符数组和数字数组一样。(其实数字数组也是字符数组)
sizeof的一些小细节
用sizeof后面如果是数组,可以不加括号,因为sizeof是一种关键词,但 int 之类的就不能不加括号了。
sizeof计算对象的大小也是转换成对对象类型的计算,也就是说,同种类型的不同对象其sizeof值都是一致的。
sizeof可以对一个表达式求值, 编译器根据表达式的最终结果类型来确定大小,一般不会对表达式进行计算。(网上搜的(-v-)~)
当然,不同类型的相加会自动转换到值较大的那个。
sizeof也可以计算函数。但得出的结果和函数本身没关系,函数也不会调用,只是计算返回值的大小。但不能计算函数名,我想应该没人会无聊到去计算函数名的吧(—> v —>)。
(注意:sizeof( int* )在32位机器是4,而在64位机器是8,这和电脑的地址线的多少有关系。(指针都是一个类型的,存的都是地址,表示的位数就是地址位 / 8))
还有,就是调用函数时形参是指针,指向实参,所以说函数里形参的值是指针的值。
下面是一些网上截来的知识点,提前知道一些,以后用。
最后,说一点,(上面提到过)strlen是计算字符串的大小,没法计算数组,我看谁敢弄错哦。
如果算数组的话他会报错,别问我为什么知道…
好了,就到这里了,虽然大部分在搜狗百科都能搜到,但还是会有人懒得搜,我懂得(—>v—>)。所以我决定做这个以开始我的博客生活,希望我的将来能像我这个开端一样,虽然过程很苦,但结果很甜。
————一个来自三线城市却期望梦想实现的大一狗