const相关的一道面试题
以下3个有什么区别
char * const p;
char const * p;
这样的普通数据类型,直接是只读常量,不可改;
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可读写
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可读写