数组,指针容易忽略的问题

tips:
    如果你觉得数组,指针方面的知识已经很扎实了,我建议你往下接着看,因为你有可能发现原来这些知识点被自己忽略了、、、
    如果你觉得数组,指针方面的知识不太扎实,那就更建议你看一下了,毕竟别人踩得坑,提前察觉也挺好的、、、

以图片为例子:

1.strlen的结束标志是 \0,sizeof的大小是静态分配时候数组的大小,因此,不会因为遇到 \0 就停止。
在这里插入图片描述


2 . 首先:数据类型的作用就是对待一块内存空间是怎么看的,如果以不同的视角看同一块空间中的内容,得出来的结果就是还不一样的。 比较的两个数的时候,也是比较的是内存空间中的内容。由此就出现了以下不同类型的a,b的值确实相同的现象。在这里插入图片描述


3.这里涉及到一个知识点,函数的链接属性(应该是这个叫法),就是函数的返回值不用新的变量接收,函数本身就是有值。在打印的时候再一次调用fun1(),导致结果是11。 另外,有不太清楚static用法的可以翻看博主关于static的介绍。


  1. 这里涉及到的知识点就是动态空间申请,释放malloc和free相关知识点了,malloc申请空间成功后,会返回申请空间的首地址,而free是对申请的空间进行释放,free释放空间时,指针必须指向申请的空间的起始位置!!!否则会释放错误,抛出异常。 因此常常做法是申请出来的空间返回值,用另一个指针变量操作,这也是一种良好的编程习惯。在这里插入图片描述

5.通过输入设备(键盘),将输入的值先保存在缓冲区中,在从缓冲区中取出一定大小的数据,通过输出设备(显示器)显示到屏幕上。输入了1234567890,但是实际上只从刚才的10个数据中取了5个数放到申请出来的input数组中,input数组中的内容是12345000,而 %s,遇到\0 停止。strlen遇到 \0 也会停止。
注意: char input[],输入的是数字,但是从char类型看过去就是ASCII码值, ASCII码值为0,对应的就是 \0。
在这里插入图片描述
ASCII码值与 char 类型的值之间对应关系:在这里插入图片描述


6.为什么合在一起就是正确,分开写就报错了呢?
原因: 没有理解数组名单独出现时,表示的是数组首地址。
         257行,是申请了空间,空间中存放的是h,e,l,l,o字符
         259,260行,是申请了空间,b表示的就是申请空间的首地址,b表示一个地址,地址是固定的,怎么可以给地址赋值呢?!!!
如果这一道题有问题的话,想必指针,数组,与整形变量之间的运算,就是指针移动这块的知识点有些混乱,建议看看博主其他相关博客。在这里插入图片描述


7.连续赋值问题:解决这个问题的最好方法就是,站在编译器的角度,看看代码中遇到的变量是不是没定义就使用了。
在这里插入图片描述