![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
c++指针问题
2个回答
2014-10-05
展开全部
指针变量也是变量,只不过它存放的内容是另一个变量或对象的地址,只有这样,该指针才能指向另一个变量或对象
例如下面代码:
#include<iostream>
using namespace std;
int main(){
int val = 10;
int *p = &val;
cout<<"val = "<<hex<<val<<endl;
cout<<"&val= "<<hex<<&val<<endl;
cout<<"&p = "<<hex<<&p<<endl;
cout<<"p = "<<hex<<p<<endl;
cout<<"*p = "<<hex<<*p<<endl;
return 0;
}
执行结果:
在这里,指针变量p的内容是变量val的地址,
变量在内存中的存放情况:
追问
你的代码我知道我也会,我就是不清楚为什么读取指针本身的地址处的值是指针保存的另一个变量或对象的地址。我想听理论。
追答
指针的作用就是通过指针来间接指向一个内存地址,当操作系统要通过指针p间接访问变量val的内容时,操作系统目前唯一知道的是指针p的内存地址,所以操作系统首先寻址,找到p的内存地址空间,然后访问该内存地址空间的内容,得到指针p所指向的变量的地址,然后再次寻址找到指针p所指向的变量或对象的内存地址空间,访问里面的内容。也就是说,指针p指向变量val的具体本质的体现就是,指针变量p存储了变量val的内存地址,只有这样,才能建立其他们之间的联系,操作系统才能通过p来间接访问val。同理,修改指针变量p的值为变量的val2内存地址,这样指针p就指向了变量val2,而失去了与变量val的联系。所以,只有指针内容保存另一个变量或对象的地址,才能建立它们之间的指向关系,操作系统才能通过二次寻址,间接访问p指向的变量或对象。
展开全部
*p[4]是一个含有4个指向整形数据的数组,每一个指针又可以指向一个数组
所以这样的指针的下标p[i][j]中,i是指这个指针数组的下标,比如*p[4]的4个元素分别指向4个含有3个元素的数组,那么再取一次下标j就是子元素(4个指针分别指向的4个数组===用下标i表示)中的元素(就是含有3个元素的数组中的这3个元素,用下标j表示)
图示:
*p[4]---p[0]-----p[0][0]
p[0][1]
p[0][2]
p[1]-----p[1][0]
p[1][1]
p[1][2]
p[2]-----p[2][0]
p[2][1]
p[2][2]
p[3]-----p[3][0]
p[3][1]
p[3][2]
所以这样的指针的下标p[i][j]中,i是指这个指针数组的下标,比如*p[4]的4个元素分别指向4个含有3个元素的数组,那么再取一次下标j就是子元素(4个指针分别指向的4个数组===用下标i表示)中的元素(就是含有3个元素的数组中的这3个元素,用下标j表示)
图示:
*p[4]---p[0]-----p[0][0]
p[0][1]
p[0][2]
p[1]-----p[1][0]
p[1][1]
p[1][2]
p[2]-----p[2][0]
p[2][1]
p[2][2]
p[3]-----p[3][0]
p[3][1]
p[3][2]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询