const相关的一道面试题

来源:互联网 发布:0verture for mac 编辑:程序博客网 时间:2024/05/17 06:22
以下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 variableprintf("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可读写

0 0
原创粉丝点击