用变量a给出下面的定义:
①一个整型数; int a;
②一个指向整型数的指针; int * a;
③一个指向指针的指针,它指向的指针是一个整型数; int * * a;
④一个有10个整型数的数组; int a[10];
⑤一个有10个整型数的数组,该指针是指向一个整型数的; int * a[10];
⑥一个指向有10个数组的指针; int (*a)[10];
⑦一个指向函数的指针,该函数有个整型参数并返回一个整数型; int(*a)(int);
⑧一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数; int (*a[10])(int);
定义变量或解析定义时用到的左右法则:
——》int (*a[10])(int)
——》首先找到变量名a,先往右看遇到了【】,说明a首先是一个数组,【】里面是个10,表明数组中有10个元素;
——》再往右继续看,遇到了),这个时候掉转方向往左看,遇到*,表明数组里面保存的变量是指针变量
——》继续往左看遇到了(,这个时候又要调转方向,往右看,遇到了()
——》说明指针变量指向的是函数,()里面的int,表明函数的形参只有一个并且是整型参数,又掉转方向往左看,遇到int,说明函数的返回值是int型的。
int add (int a,int b);
函数的名字
函数的形参
函数的返回值
——》左右法则:首先找到变量名,然后往左看,每次遇到括号掉转方向,直到把定义解析完毕。
——》强调的是:
1.遇到数组时,应该问自己:这个数组里有多少元素,元素又是什么类型的;
2.遇到指针时,应该问自己:这个数组里有多少个元素,元素又是什么类型的;
3.遇到函数的时候,应该问自己,函数的形参有没有,有的话有几个,每个参数又是什么类型的,函数的返回值是什么
左值右值:
int a =12
解析:程序里定义了一个int型变量,变量名为a,并且把变量初始化化为12;
编译器编译到这行的时候,会在内存里面分配一块空间——》这空间有多大呢?——》int字节的大小
这个空间的名字叫“a”,并且把12这个数放到空间里。
初始化和赋值
在定义变量的时候就给变量赋值,叫初始化。 int a = 8;
在定义变量之后,再对变量进行操作,比如改变变量的值,叫赋值
int a;
a = 8;
变量的作用范围:
全局变量:作用范围是整个.c文件
局部变量:作用范围是{ }所在的代码块
当全局变量和局部变量有重合的时候,用近的那个。