一.sizeof和strlen对比:
1.sizeof:
在学习操作符的时候,我们学习了 sizeof , sizeof 计算变量所占内存,内存空间⼤⼩的,单位是字节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。sizeof 只关注占⽤内存空间的⼤⼩,不在乎内存中存放什么数据。
上述代码中虽然在sizeof中让a+10但是到最后a的值并没有改变,这可以更好的说明sizeof只在乎你的数据是什么类型而不在乎数据是多少 其内部也不会去计算这个表达式。
2.strlen:
strlen 是C语⾔库函数,功能是求字符串⻓度。统计的是从 strlen 函数的参数 str 中这个地址开始向后, \0 之前字符串中字符的个数。 strlen 函数会⼀直向后找 \0 字符,直到找到为⽌,所以可能存在越界查找。
上述代码中arr1是一个字符数组他本身创建时后面不会带有'\0‘所以当用strlen去计算其长度时出现的就是任意值因为不知道这个创建的数组'\0'在哪里也就不知道他什么时候停止计算量。而arr2是一个字符串创建完成后后面会加上一个'\0'。而strlen在碰到'\0'时就会结束所以计算结果不会加上'\0'这个字符。
3.sizeof和strlen对比:
从上述代码就可以看出sizeof不管内存中存放什么只计算占据内存大小,strlen就就算字符串长度了,简单点理解就是去找'\0'的位置。
二.数组和指针笔试题解析:
1.对数组名的理解:
分析例题之前,首先分析一下数组名在不同的情况下分别表示什么:
1.在一般情况下:数组名是数组首元素(第一个元素)的地址。
2.在两种特殊情况下: 1. sizeof(数组名) - 数组名表示整个数组,计算的是整个数组 的大小,单位是字节。
2. &数组名 - 数组名表示整个数组,取出的是整个数组的地址
2.一维数组:
3. 字符数组:
例1:
1.sizeof:
2.strlen:
如果不将两个代码有问题的代码屏蔽掉,运行会出现问题。
屏蔽之后的结果为:
例2:
1.sizeof:
2.strlen:
例3:
1.sizeof:
2.strlen:
4.二维数组:
5.指针运算题目讲解:
例1:
例2:
例3:
例4:
例5:
例6:
例7:
由于电脑画图太过繁琐,手写解析如下: