学习:C语言无法正确传参数的原因是什么?因为分不清b[10]是数组还是数组中一个具体的值。要怎么样传数组参数才是正确的?
1函数参数形参实际上都是指针变量int*p等效为int p[]
2将数组名作为实参传入即可,数组名实际上是指针变量,如传入a
学习:指针为什么难?因为变化比较多,只记住每一种类型最简单的用法,先会使用,再不断在使用中加深理解,记住指针变量是个地址,如2201,然后知道具体用法
1.&取地址运算符,s是取地址所指向的对象。
2.把内存具体化,一边是地址,一边是存储的对象
3.指针变量默认值就是一个地址,地址只能和地址进行运算,指针变量本身是地址,然后&指针变量取出对应的地址。地址和值之间需要做一个转换。不经过转换的话,地址永远只是地址,如2203567890
4.数组本身就是一个地址,a[10],a本身在系统中是个地址
5.数组名是可以作为函数参数的,但是return无法返回数组,只能返回指针或者确定的值。传参的时候实际上传入的是个指针。
6.形参是个指针变量,实参只能是具体的指针或者确定的值。数组形参不带[]的话,系统怎么知道是个数组?这样的话实际上,p和p[]在系统里是没有区别的。实参传入数组时,实际上传入的是个确定的值,如random(a[2]),传入的是a[2]的值
7.拿个具体的数值来给指针变量算值比较容易理解。记住一个等价公式进行换算,定义之外,p = a[0]等价。(p+1)=a[1],((p+1)) = a[1][0]数值等价。((p+1)+i) = a[1][i]数值等价
8.临时变量在指针的作用域是有可能在watch中看不到的,由于变化比较短暂。不是keil5优化的问题,就是看不到
9.定义一个指针指向这个数组,然后把指针拖到memory里面看,局部变量是看不到的,除非你定义为局部第四个之后的变量,因为前四个会加载到寄存器里面~。指针指向的数组可以从keil5中memory中查看
10.keil5 局部指针指向的数组只能在memory中查看,watch中查看不了。想在watch中查看就转换为全局变量。