笔试题,面试题经常考到const ,下面就通过实例对const进行总结。
首先要理解常量指针和指针常量的区别,* (指针)和 const(常量) 谁在前先读谁。
const int *p //常量指针
int const *p //常量指针
int * const p //指针常量
另外const后面 修饰谁,说明它不能改变,const int *p const 后面是int *p 说明初始化后*p不能改变,int * const p ,const后面修饰的是p说明初始化后p不能改变。
#include<stdio.h>
#include<stdlib.h>
//1.const int *p 限定只能读,不可以改,地址可以移动,可以访问别的账户
//2.int const *p 同1
//3.int * const p 限定不可以查看别人账户,自己的账户可读可写
//4.const int * const p 限定不可以查看别人账户,只能查看自己的账户只能读不能写
//5.int const * const p 同4
void read_all_account(const int *p,int length)
{
int index;
for(index=0;index<length;index++)
{
printf("%d \n",*p);
//*p=5000; //error不能给常量赋值
p++;
}
}
void read_write_own(int *const p,int modify_data)
{
printf("read: %d \n",*p);
*p=modify_data;//修改
printf("write:%d \n",*p);
//p++; //error 地址不能改变只能读写自己的账号
}
void read_only_own(const int *const p) //只能读自己的
{
printf("read: %d \n",*p);
//*p=10000; //error 不能给常量赋值
//p++;//error 地址不能改变
}
void main()
{
int account[5]={100,200,300,400,500};// 五个账户
read_all_account(account,5); //访问所有的账户
read_write_own(&account[1],5000);//读写自己的账户以账户1为例
read_all_account(account,5);//
read_only_own(&account[2]);//只能读自己的账户,以账户2 为例
getchar();
}