- 指针变量在使用前必须赋值
没有为什么,就是必须赋,否则它会指向一个不确定地方,给它指的地方赋值是没用的哈!例如这样,不行no!(详细见收藏吧)
未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机。
这是收藏里说的...
- 形参(形式参数)、实参(实际参数)都是出现在函数调用里的东西!
形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。
形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。
函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
(形参不是指针哦)
而如果函数的参数是指针类型变量,在调用该函数的过程中,传给函数的是实参的地址,在函数体内部使用的也是实参的地址,即使用的就是实参本身。所以在函数体内部可以改变实参的值。
(形参是指针时的特殊情况)
- 不能企图通过改变形参的值而使指针实参的值改变,但是可以改变实参指针变量所指的值。
拿这道题举例来说,意思是
“只改变了形参的指向(也就是说形参的值),不能改变a和b(指针实参的值),但是改变了*p1和*p2的值(实参指针变量所指的值)!”
这句话其实也没什么特别深层次的内涵,就是理解就行...但我现在应该对实参形参有了更深的理解了吧......多复习,不会忘
4.全局变量、局部变量(动态、静态)
这个图挺有意义 以后可以回来看看 说不定有帮助
5.全局变量怎么定义
收藏了一篇还挺有用的文章......
问题如下:今天调试系统的时候,需要定义几个全局位变量,定义好后一编译,发现错误一大堆,错误基本都是位变量定义时产生的。
解决方法:通常的做法是建立一个包含系统所有全局变量的.h文件,系统用到的所有全局变量都定义在该文件内,文件名可以用Global修饰一下。在该文件中定义某个全局变量的时候需要用extern声明该变量为外部变量。
“
extern unsigned char(类型) SysEventCounter(变量名); <----这里是关键,不能对该变量赋值,只能声明,赋值就会报错。
上述声明是写在.h文件中的。其他.c文件若要用到该变量,直接包含该.h文件就可以了
如果想要赋初值,可以在用到它的.c文件中这样写:
unsigned char SysEventCounter = 0;
不用赋初值时,直接
unsigned char SysEventCounter;
就可以了。(意思应该是 和int m这种一样的定义方式,但是要有这个定义)
注意:只需要在一个.c文件中写即可,其他.c文件直接可以用。如果在其他.c文件中也这样写会产生重复定义的错误。
”
/*对上面这个注意我自己解释一下,一般是写在main函数的那个.c文件里吧,我是写在main函数前的,因为总是从main开始执行嘛。
其实就是哪个要最开始先用这个变量,在那个函数之前定义就好吧(这我不确定),所以这就牵扯出那个问题:是不是在任意一个.c文件定义都可以?
虽然那个收藏夹里说可以,但不一定真的可以,但应该大概率可以!哦我想通了 没错就是可以。
以及在main函数的那个.c文件里,它是否一定要放在main函数前面我也不确定。
虽然但是,我觉得以上这两个也不太需要确定。总之,放在main函数前一定不会错。*/
经过以上一番神经病的挣扎,我已经确定上面那段引用的收藏说的完全是对的!!
我自己总结一下原理吧:extern指的是外部变量,我们虽然想要的是全局变量(它在函数外部)没错,但在多文件中,跨文件时这个全局变量是属于外部的,尽管它是全局的(也属于静态存储区)。所以除了在第一个(可以是任意一个)文件中定义的变量是常规的以外,其他想要用到它的文件都要加extern!至于把extern和变量放头文件只是为了方便引用,我们也可以想用一次写一次啊,没问题的。
当然,以上属于多文件情况,如果是单文件情况,emmm也没必要想这么多了,不用extern。
最后在搞这个多文件的全局变量!!还要差缺补漏啊......
晚上9点40分 一切都结束了!这个项目全部完成!!
祝今晚好眠。