关键字修饰的是最近的变量即就近原则
extern和volatile: extern和volatile各自单一的用法就不多说了。当两个在一起使用时表示 接口(extern修饰)易变(volatile修饰)变量;用法:
main.c文件中 volatile uint8 frequency_change_flag=0;
main文件之外 extern volatile uint8 timer_count;
注意这里的extern后也要用volatile声明
volatile修饰数组: uint8 volatile dis_buffer[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
表示数组dis_buffer[]里的元素是易变的 下面拉段论坛里的文字助于理解:
volatile int *a[x];这样好像是a指向的地方
--- 这其实是说 *a[0], *a[1] 是易变的,而非“a指向的地方”a指向的地方和a[x]指向的地方都易变要怎么写?
------ 其实我听不懂“a指向的地方”是啥意思,a是数组名,本来就不可更改;要a[x]为volatile应当写成 int* volatile a[x];
如果b里面的p是易变的呢?直接结构体里volatile int *p??
------ 同理 volatile int *p 指 *p 为 volatile,欲p 为 volatile当写成int*volatile p
return: 函数可以返回数值的局部变量即传值,但不能返回指针和数组即传址。 函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的) 。那如果真的想返回局部变量的地址(即数组和指针)怎么办。那就把这个变量或数组static修饰吧,由于static修饰后,这个变量和数组是一直存在的,指针指向它(变量或数组)没有问题的。红色部分是这里拉的,你可以参考下