首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

300分求解const指针的有关问题

2012-02-09 
300分求解const指针的问题const 是“最靠近”为原则指向整数常量的指针:const int * p它所指向的值只读不能

300分求解const指针的问题
const 是“最靠近”为原则
指向整数常量的指针:const int * p;它所指向的值只读不能被修改 *p = 4(错误),p =
5(正确)
指向一个整数的常量指针:int * const p;不允许修改指针变量的值,*p = 5 (正确),p
= 5 (错误) 
*p指向指针所指的地址的变量值,而p呢?
*p与P之间有什么区别。p指向什么?

[解决办法]
占帖学习。

[解决办法]
40?
300?
结果不是你说的么?
[解决办法]
p是指针,存放的是指向的int变量的地址,比如说p=0x12345678。*p是解引用指针,也就是通过p中存放的地址,也就是0x12345678找到相应的int型变量,即*P,存放的是int变量。
[解决办法]
指针的定义就是变量的地址,指针p中存放的是一个变量的地址,*p就是取p中存放的内存地址的数值,当然指针p自己本身也有地址,可以用&p取出,*&p就是取出p中保存的地址
[解决办法]
你对*的用法还没了解
[解决办法]

探讨
*&p取出的是指针p自身的地址还是指向的变量的地址?

[解决办法]
*&p 这个是啥?能这样用?

*p 就是相当于被他指向的变量。
而p也就是这个指针的本身所占用内存里储存的值,也就是他指向的变量地址的值。

假如一个指针p 它的地址是0x11111111 这个地址存放的值是 0x22222222 那么*p就是对地址0x22222222做解引操作,也就是去找这个地址存放的值,可能就只是个int型的1而已。。
[解决办法]
变量int a = 1 保存在内存的0x1000处,现在用指针p来保存a的地址,但是指针p也是变量,需要保存在内存的一个区域,假设p保存在0x2000处,因为p是用来保存a的地址的,所以p的值为0x1000
&p就是取变量p保存的地址,于是得到0x2000,*&p也就是*(&p)可以看成*(0x2000),是取0x2000这个内存地址保存的值,而保存在该内存地址的正好是变量a的地址,即0x10000
[解决办法]
探讨
变量int a = 1 保存在内存的0x1000处,现在用指针p来保存a的地址,但是指针p也是变量,需要保存在内存的一个区域,假设p保存在0x2000处,因为p是用来保存a的地址的,所以p的值为0x1000
&p就是取变量p保存的地址,于是得到0x2000,*&p也就是*(&p)可以看成*(0x2000),是取0x2000这个内存地址保存的值,而保存在该内存地址的正好……

[解决办法]
const int * p;常量指针。

见过const int const *p;吗?
[解决办法]
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!

[解决办法]
过来看看,顺便接今天的分。。。
[解决办法]
探讨
引用:
变量int a = 1 保存在内存的0x1000处,现在用指针p来保存a的地址,但是指针p也是变量,需要保存在内存的一个区域,假设p保存在0x2000处,因为p是用来保存a的地址的,所以p的值为0x1000
&p就是取变量p保存的地址,于是得到0x2000,*&p也就是*(&p)可以看成*(0x200……

[解决办法]
路过的
[解决办法]
探讨
引用:
引用:
变量int a = 1 保存在内存的0x1000处,现在用指针p来保存a的地址,但是指针p也是变量,需要保存在内存的一个区域,假设p保存在0x2000处,因为p是用来保存a的地址的,所以p的值为0x1000
&p就是取变量p保存的地址,于是得到0x2000,*&……

[解决办法]
const int *p和int const*p是同一个意思
你是想说const int *const p;吧。

这就是说p本身的指向是不能被修改的,而且p所指的内存里面包含的内容也不允许被修改。
[解决办法]
探讨
什么时候用指针?什么时候用引用?这个问题。。。。。。。。

[解决办法]

探讨
const int *p和int const*p是同一个意思
你是想说const int *const p;吧。

这就是说p本身的指向是不能被修改的,而且p所指的内存里面包含的内容也不允许被修改。


[解决办法]
p是指向的变量的地址,*p 是指向的变量的值
[解决办法]
两个CONST作用是不一样的。
[解决办法]
const修饰谁谁不变
const int * p 是const int 值不可变指针可变
int * const p int const * 值能变指针不能变
[解决办法]
楼主去看看 c和指针 c缺陷与陷阱 两本pdf 吧
[解决办法]
我还真以为是300分呢 这样能迎来高手吗?  期待中……
[解决办法]
。。。。。。。。。。。。。。。。
[解决办法]
以下是本人之前总结的 希望对楼主有用:

1.const修饰指针正在指向的对象
2.const修饰指针所代表的地址
3.const既修饰正在指向的对象,又修饰指针所代表的地址
-----.指针间操作赋值必须类型相同
1.const修饰指针正在指向的对象(常量指针)
.const修饰的量是最靠近它的那个量 而且从const标示符从里往外读-----即指针间操作必须类型相同,并且所指向内容不可以改变
#include <iostream>
using namespace std;
void main()
{

 int a=123;
 const int b=4;
 const int* ptr;
 int* p;
 ptr=&a;//可以通过
 a=3;
 b=6;//不可以给常量赋值
 *ptr=2;//不能给常量赋值
 p=ptr;//不能把常量指针转换到变量指针
 }

2.const修饰指针所代表的地址(指针常量||const指针)
--指针常量,即一旦初始化后不能作任何改变(必须声明时候就初始化),甚至再次初始化,其指向对象可以改变
#include <iostream>
using namespace std;
void main()
{
int a=1,b=2;
int* const ptr=&a;//声明就初始化
*ptr=2;//可以改变其修饰对象
ptr=&a;//NO complier
ptr=&b;//NO
 }

VC++技术QQ交流群39394054 群员热情友好 每周六晚有丰富工作经验的讲师主讲 C++大讲堂 完全免费的 欢迎菜鸟 高手 大虾加入
[解决办法]
根据我以上总结,回答楼主疑问:
一:
指向整数常量的指针:const int * p;它所指向的值只读不能被修改 *p = 4(错误),p =
5(正确)
const int * p; const修饰指针变量int* 即指针变量所指向的内容不能修改,而所指针地址可以修改,所以*p=4;改变指针所指向地址的值,错误。
p=5;相当于把p所指向的地址值改变,正确。

二:
指向一个整数的常量指针:int * const p;不允许修改指针变量的值,*p = 5 (正确),p
= 5 (错误)
现在是修饰指针p,而P基本数据类型是指针 指针即地址,你说要把P的地址改为5可以吗 当然错误啦。


*p指向指针所指的地址的变量值,而p呢?
*p与P之间有什么区别。p指向什么?
声明了int *P;
指针 就是保存地址的数据类型(可以这样理解) 地址所指向的内容 可以通过*p 解引用获得。就是这样一回事,不要想得太复杂。

这样详细的答案 楼主看着办吧。

VC++技术QQ交流群39394054 群员热情友好 每周六晚有丰富工作经验的讲师主讲 C++大讲堂 完全免费的 欢迎菜鸟 高手 大虾加入
[解决办法]
const int * p 是const int 值不可变指针可变
int * const p int const * 值能变指针不能变
[解决办法]
探讨

变量int a = 1 保存在内存的0x1000处,现在用指针p来保存a的地址,但是指针p也是变量,需要保存在内存的一个区域,假设p保存在0x2000处,因为p是用来保存a的地址的,所以p的值为0x1000
&amp;p就是取变量p保存的地址,于是得到0x2000,*&amp;p也就是*(&amp;p)可以看成*(0x2000),是取0x2000这个内存地址保存的值,而保存在该……

[解决办法]
对于指针要明确4点:
 1.指针的类型
 2.指针的值
 3.指针所指向的内存中值的类型
 4.指针所指向的内存的值

p表示指向的内存空间的地址
*p表示p指向的内存空间的地址里存放的值

 建议lz看看《C和指针》这本书
[解决办法]
C/C++ code
int a;a = 1;int b = 2;int * p = &a; // p指向aa = 2; // a的值可以被修改,也可以*p = 2;p = &b; // p的值也可以被修改,即p改变指向,指向b
[解决办法]
首先p是一个指针的话
 p 里面是存的地址,
 *p 的话就是这样第一的,以p里面的地址为首地址,然后以其基类行的长度为为长度的内存空间里面的值!


[解决办法]
好好想一想就明白了。 eg: 定义int *p; 在用的时候, p里地址(指针);而*p里地址里的值。

记住一个口决,“前固数,后固址”。

热点排行