C语言中const的用法
const:在定义变量时,如果使用关键字const,那就表示限制这个变量值不允许被改变。
(1) 修饰变量
const离谁越近,谁的值就不能改变.
int const a=0 声明一个变量a,把0赋值给a,用const修饰之后,a再也不能被赋其他值。此时int const a=0等价于const int a=0。
注:int const a;
a=0;
这样的写法是错误的,因为a已经被const修饰,不能被赋值了。
(2) 修饰指针
int const *p=&a
声明一个int类型的指针p,内存为p分了一个单元,里面存的是一个整型数据单元a的地址。*表示索引,*p就是根据a的地址找到该地址所对应的内存单元,取出里面存的值。*p的值就是内存单元p里的地址指向的值。然后const修饰了*p,表示那个整型数据不能被修改。也就是说整型单元a里的数据不能被修改。但是此时可以改p的值,p没有被const修饰。
此时int const *p=&a等价于const int *p。
int * const p=&a
声明一个int类型的指针p,内存为p分了一个单元,里面存的是一个整型数据单元a的地址。*表示索引,*p就是根据a的地址找到该地址所对应的内存单元,取出里面存的值。*p的值就是内存单元p里的地址指向的值。然后const修饰了p,表示内存单元p不能重新被赋值,只要p没被释放,p中存的只能是此时a的地址(p=&b就是错误的)。但是此时*p没有被const修饰,所以我们可以通过*p来改整型单元a中存的值(*p=b;)。把b的值赋给a。
const int* const p
p的值被const修饰了,*p也被const修饰了。所以p的值不能被修改,*p也不能被修改(p=&b;*p=b;都是错误的)。
一维数组
数组:一组数据的整体。当你定义一个数组时,内存会为你分配一块连续的存储单元。数字中的每个数据都会依次存入这块连续的单元中。
int a[4]={1,2,3,4};
声明一个整型数组,该数组有四个元素,数组名为a,同时也是该数组的首地址。我们可以通过偏移量来访问数组的每个元素。
数组指针和指针数组
数组指针:
声明一个指针,然后让这个指针指向一个数组。
int a[5]={0};
int *p=a;
让p指向数组a。把数组的首地址a赋值给p。同样我们可以用指针加上偏移量访问元素(*(p+偏移量))。
指针数组:
定义一个数组,这个数组里存放的每个元素都是相同类型的指针。
int * p[4];
定义一个数组p,有四个元素,该数组的类型为int *(整型指针)。所以这四个元素的类型都是int *。