C++指针初学
dval = 3.14159; // dval is not const
*cptr = 3.14159; // error: cptr is a pointer to const
double *ptr = &dval; // ok: ptr points at non-const double
*ptr = 2.72; // ok: ptr is plain pointer
cout << *cptr; // ok: prints 2.72
这是摘自C++ primer 里面4.25节的内容有点不太懂
1. *ptr = 2.72 怎么就OK了? 我在VS2008上面显示错误
2.*ptr = 3;这样写对吗?意思是把ptr的地址改为3吗?
3.cout << *cptr; // ok: prints 2.72 为什么变成2.72了?
谢谢赐教!!
[解决办法]
C++ primer 里代码示例 是一小段,不完整。
要看上下问 关联,楼主 先了解指针大概的使用
再来看 C++ primer 的 数组和指针 这一章会好点
[解决办法]
1. *ptr = 2.72 怎么就OK了? 我在VS2008上面显示错误 ---- double *ptr = &dval; *ptr初始化指向变量dval, *ptr = 2.72 是改变它指向的变量值
2.*ptr = 3;这样写对吗?意思是把ptr的地址改为3吗? ---- 只要*ptr已经被赋值指向某变量地址就对,是改变它指向的变量值为3
3.cout << *cptr; // ok: prints 2.72 为什么变成2.72了? ---- 漏看代码了吧,好像*cptr被重新赋值过了
[解决办法]
前面还有几句,完整的一段是这样的:
const double *cptr;
double dval = 3.14;
cptr = &dval;
dval = 3.14159; // dval is not const
*cptr = 3.14159; // error: cptr is a pointer to const-------------1
double *ptr = &dval; // ok: ptr points at non-const double-------------2
*ptr = 2.72; // ok: ptr is plain pointer--------------3
cout << *cptr; // ok: prints 2.72---------------4
解释如下:
1.
cptr可以指向常量,也可以指向变量,它不知道它所指向的是常量还是变量,
所以cptr把它所指向的值一律看成常量,不能通过给*cptr赋值来改变所指向的值。
2. 3.
这个就不用解释了把。
4.
虽然不能通过cptr来改变其所指变量的值,但是它管不到别的指针来改变变量的值,
*ptr = 2.72;这句把dval的值改变成了2.72,由于ptr和cptr的地址是一样的,都指向
dval,当然*cptr的值也是2.72了。
[解决办法]
楼主 :
*ptr=2.72;
这个赋值是基于
double *ptr = &dval;这句代码的。
ptr已经指向了一个变量的地址,这是相当于给dval赋值为2.72
如果*ptr=2.72;这句代码单领出来肯定是错误的。
C++ primer这本书里的很多讲解都是前后结合的,建议你看的时候尤其是看某一章的时候从前往后体会着看.
[解决办法]
你要知道*的名字是解引用操作符哦 好好想想这为什么叫这名字。。 ptr是指针也就是说ptr的值是地址
加了解引用操作符就变成它所指向的东西了。。要理清关系哦。。