|
5鱼币
指向常量的指针 不能通过解引用*改变常量的值但是可以直接通过改变常量的值来做到常量的变化。
两种方式在我的理解看来是一样的,解引用通过地址的读取间接改变常量的值。即 *pc = 1024;这样是不可行的
但实际上为什么不对呢?解引用的过程是怎么样的。
文字抽象,附上代码- 指向常量的指针 不能通过解引用*改变常量的值但是可以直接通过改变常量的值来做到常量的变化。
- 两种方式在我的理解看来是一样的,解引用通过地址的读取间接改变常量的值。即 *pc = 1024;这样是不可行的
- 但实际上为什么不对呢?解引用的过程是怎么样的。
- 文字抽象,附上代码[code]#include <stdio.h>
- int main()
- {
- int num = 520;
- const int cnum = 880;
- const int *pc = &cnum;
-
- printf("cnum: %d. &cnum: %p\n", cnum, &cnum);
- printf("*pc: %d, pc: %p\n", *pc, pc);
-
- pc = #
- printf("num: %d. &num: %p\n", num, &num);
- printf("*pc: %d, pc: %p\n", *pc, pc);
-
- num = 1024;
- printf("num: %d. &num: %p\n", num, &num);
- printf("*pc: %d, pc: %p\n", *pc, pc);
-
- return 0;
- }
复制代码 [/code]
本帖最后由 sunrise085 于 2020-5-13 10:42 编辑
- int num=520;
- const int cnum=888;
- int n=211;
- const int *pc=cnum;//指向常量的指针
- int *const p=#//常量指针
复制代码指向常量的指针,不能通过解引用改变常量的值但可以直接通过改变常量的值来做到常量的变化
意思是不能通过*pc=num的方式修改常量的值,这也是为了保护指针所指向的常量的常量性,但是可以直接改变常量的值,即pc=&num来做到常量的变化。这实际上是指针指向了另一个对象,另一个对象既可以是常量也可以是变量。
常量指针,只能指向变量,而且必须在声明的时候进行初始化,之后不能再改变指针的指向,但是能通过解引用修改变量的值。即不能p=&n,只能*p=211,这样修改num的值。
简言之,
指向常量的指针,被剥夺了通过*pc=num来修改所指向的单元的值的权限,以此来保护所指向的常量不被修改;
常量指针,被剥夺了通过p=&n来修改指针的指向的权限,以此来保护常量指针不被移动位置
|
最佳答案
查看完整内容
意思是不能通过*pc=num的方式修改常量的值,这也是为了保护指针所指向的常量的常量性,但是可以直接改变常量的值,即pc=&num来做到常量的变化。这实际上是指针指向了另一个对象,另一个对象既可以是常量也可以是变量。
常量指针,只能指向变量,而且必须在声明的时候进行初始化,之后不能再改变指针的指向,但是能通过解引用修改变量的值。即不能p=&n,只能*p=211,这样修改num的值。
简言之,
指向常量的指针,被剥夺 ...
|