C语言中const和数组

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 *。

 

posted @ 2016-05-30 17:15  beautiful_lady  阅读(10188)  评论(0编辑  收藏  举报