常量指针与指针常量的区别
来源:互联网 发布:网络通信 编辑:程序博客网 时间:2024/06/02 04:49
const 常量
* 指针
const int * p = int const * p //常量指针
int * const p //指针常量
常量指针通常指向常量,不能通过指针去修改常量的值。
有时也会指向变量,eg:
int s = 10;
const int * p = &s;
但还是不能通过指针去修改指向的常量的值,可以通过 s=20,去修改这个值。
总结,常量指针就是"为了指向常量而发明的指针"
指针常量首先是一个指针,其次这个指针类型的值是常量,声明时要初始化,且不能改变。
但这个指针指向的值是可以改变的。
char * a = "abcde1234"; // a是指向常量字符串的字符串指针变量
const char *b = "bcde"; // b是指向常量字符串的字符串常量指针
char * const c = &a; // c是指向字符串指针变量的字符串指针常量
const char *const d = &b; // d是指向字符串常量指针的指针变量
问题来了。
1)问:因为a是变量,a可以赋值为其它值,如"12345abc"。那么c指向a,当a变化了,c指向什么呢?
【错误】c是字符串指针常量,c自身不能改变,但c指向的值可以变化。所以,c指向变化后的a。
【正确】a改变之前,a和c都指向"abcde1234".后来a变了,c还是存的是"abcde1234"的地址。所以c指向的未变化。
2)问:a是变量,可以改变a的内容。那么当执行了“a[0] = 'x';”后,c会怎样呢?
【正确】a[0]不能赋值,指向的是字符串常量.
3)问:b是指向常量的指针变量,当b指向别的字符串,d怎么样?
【正确】跟1)一样.
4)问:b可以变化,b指向的字符不能变化,也就是说b[0]不能被重新赋值,可是b[1]可以被重新赋值吗?
【正确】不可以.
* 指针
const int * p = int const * p //常量指针
int * const p //指针常量
常量指针通常指向常量,不能通过指针去修改常量的值。
有时也会指向变量,eg:
int s = 10;
const int * p = &s;
但还是不能通过指针去修改指向的常量的值,可以通过 s=20,去修改这个值。
总结,常量指针就是"为了指向常量而发明的指针"
指针常量首先是一个指针,其次这个指针类型的值是常量,声明时要初始化,且不能改变。
但这个指针指向的值是可以改变的。
char * a = "abcde1234"; // a是指向常量字符串的字符串指针变量
const char *b = "bcde"; // b是指向常量字符串的字符串常量指针
char * const c = &a; // c是指向字符串指针变量的字符串指针常量
const char *const d = &b; // d是指向字符串常量指针的指针变量
问题来了。
1)问:因为a是变量,a可以赋值为其它值,如"12345abc"。那么c指向a,当a变化了,c指向什么呢?
【错误】c是字符串指针常量,c自身不能改变,但c指向的值可以变化。所以,c指向变化后的a。
【正确】a改变之前,a和c都指向"abcde1234".后来a变了,c还是存的是"abcde1234"的地址。所以c指向的未变化。
2)问:a是变量,可以改变a的内容。那么当执行了“a[0] = 'x';”后,c会怎样呢?
【正确】a[0]不能赋值,指向的是字符串常量.
3)问:b是指向常量的指针变量,当b指向别的字符串,d怎么样?
【正确】跟1)一样.
4)问:b可以变化,b指向的字符不能变化,也就是说b[0]不能被重新赋值,可是b[1]可以被重新赋值吗?
【正确】不可以.
阅读全文
0 0
- 常量指针与指针常量的区别
- 常量指针与指针常量的区别
- 指针常量与常量指针的区别?
- 常量指针与指针常量的区别
- 指针常量与常量指针的区别
- 常量指针与指针常量的区别
- 常量指针与指针常量的区别
- 常量指针与指针常量的区别
- 常量指针与指针常量的区别
- 指针常量与常量指针的区别
- 常量指针与指针常量的区别
- 常量指针与指针常量的区别
- 常量指针与指针常量的区别
- 指针常量与常量指针的区别
- 常量指针与指针常量的区别
- 常量指针与指针常量的区别
- 常量指针与指针常量的区别
- 常量指针与指针常量的区别
- Spring Transaction 嵌套调用
- How To Add Bookmark (mark) In Pycharm
- Servlet学习笔记—request参数接收
- 多线程详解
- Python爬虫 --requests库
- 常量指针与指针常量的区别
- 从零学习Belief Propagation算法(一)
- cmd连接mysql的方法详解,需要的朋友可以参考
- opencv操作yaml文件
- javascript中的对象
- 机器学习项目一(linear regression 暂时未完成)
- mysql日期和字符串相互转化
- 内联函数与宏替换的区别
- 基础加强 -zookeeper