const相关的一道面试题

以下3个有什么区别
char * const p;
char const * p;

const char *p;

#include<stdio.h>

void test()
{
	 /*
	 *主要测试const的是
	 *地址还是地址里的数据
	 */
char x='A';
char * const p=&x; 
//p=0x00050000;//errror,ro,不能改地址
char c='c';
//p=&c;//read-only variable
printf("first %p\n",p);
*p='b';//可以改变地址里的数据,const的是地址里的数据
printf("second %p %c %c\n",p,*p,x);
printf("=================\n\n");
char const *p2=&x; 
printf("third const *p2=%c p2=%p\n",*p2,p2);//数据也改变了
p2=&c;
c='C';
printf("fourth const *p2=%c p2=%p\n",*p2,p2);//地址改变了
/*const在这里的作用是什么呢?*/
//*p2='D';//read-only 在这里不可以用 直接操作 
//相当于一个常量指针,*p2不可以再变,但可以改变指向的数据从而改变该常量指针
}

int main(int argc,char**argv)
{
	test();
	return 0;

}
1.如果 const int a=10;
 这样的普通数据类型,直接是只读常量,不可改;
2.
如果是指针
2.1
const char *p(等同于 char const *p):
*p不可以改,但是可以改变指向的数据来间接的改变*p
 例如 const char *p=&c;
c='C';
这时*p数据改变了,p地址也改变了
    简单说就是,*p只读,p可读写
2.2
char * const p:
地址不可改变,但是可以改变*p的值,这样也可以改变指向的变量的值
p只读,*p可读写

posted @ 2015-10-22 13:50  cloudren2020  阅读(163)  评论(0编辑  收藏  举报