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

关于指针的困惑 [加分!],该如何解决

2012-02-29 
关于指针的困惑 [加分!]初始化一个指针如下:int*pi &ival然后可以通过*pi1024 修改ival的值,那么到底

关于指针的困惑 [加分!]
初始化一个指针如下:

int*pi = &ival;

然后可以通过

*pi=1024; 修改ival的值,

那么到底*pi的右边是可以等于&ival还是等于ival呢?

怎么感觉可以把值赋给*pi,也可以把地址赋给*pi呢?

如果要改变指针pi所指向的地址,是否是 pi=&nval呢?还是*pi=&nval?

谢谢!

[解决办法]
“*号是用来解引用,就是得到该地址的具体大小”这个意思应该是获得该指针所指向的内容,pi是个指针,他代表一个地址(多少位的就看你的机器和系统了),该地址里放的内容就是ival的值。比如
int ival=5;
int *pi=&ival;
cout<<*pi<<endl;
输出值为5

“指针就是一个32位的内存地址”,是说指向32位地址的首地址吗?那么如果是64位的机器,指针是指向64位的内存地址吗?
这里说的是地址的字长。指针就是一个地址,就像你写信的时候填的地址一样,能够让你在需要写信跟某个人的时候,能够找到这个人。




[解决办法]
推荐楼主看一下《C++从零开始》,在那里面有相关的解释。
在程序中,代码和数据都是存储在内存中的,需要区分开来,所以将内存按照字长划分为小块,每块大小为1Byte。在32位系统中,就有2的32次方块1Byte内存,标识则从0开始,以16进制表示。每个变量分配内存时都会有1个内存地址,这个对应一般由编译器保存。指针就是一个变量或常量,其中保存内存地址罢了,32位系统则为4个byte大小。之所以使用指针,是为了拷贝时的快捷以及动态内存分配的缘故。
楼主需要注意的是在定义时的int *与解引用*pi操作的区别,两个*的作用是不一样的,前一个是类型声明,只是表明pi是一个指针罢了,而后一个是解引用操作。

[解决办法]
int*pi = &ival; 
等价与
int*pi;
pi = &ival; 
前面的 int* 是用来声明变量的,不是用来做类型转换的。

热点排行