指针指向

ming8838 2010-07-01 09:59:51
#include <iostream.h>
struct S
{
int i;
int *p;
};
void main()
{
S s;
int *p1=&(s.i);
p1[0]=1;
p1[1]=5;//p1只是指向i,为什么可以p1[1]的?
cout<<p1[1]<<","<<s.p<<endl;
}
还有就是将int *p1=&(s.i);改为int a=9,*p1=&a;之后就不行了呢?
...全文
100 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
一土草三工 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lin98666lin 的回复:]
貌似是程序员面试宝典上的题啊
p1[1]=5;//这里是非法的赋值 能运行就算幸运 极有可能会崩

因为 s.i和 s.p的地址是连续的
p1如果指向s.i 那么 p1[1]就是 s.i的下一个四字节 也就是s.p了 而s.p是指针 如果 赋值为5
那么就不合法了

还有“还有就是将int *p1=&(s.i);改为int a=9,*p1=&a;之后就不行了呢?”
……
[/Quote]

+
ming8838 2010-07-02
  • 打赏
  • 举报
回复
怎样才能输出*p的值?为什么s.(*p)不行的?
only_delusion 2010-07-02
  • 打赏
  • 举报
回复
貌似是程序员面试宝典上的题啊
p1[1]=5;//这里是非法的赋值 能运行就算幸运 极有可能会崩

因为 s.i和 s.p的地址是连续的
p1如果指向s.i 那么 p1[1]就是 s.i的下一个四字节 也就是s.p了 而s.p是指针 如果 赋值为5
那么就不合法了

还有“还有就是将int *p1=&(s.i);改为int a=9,*p1=&a;之后就不行了呢?”
*p1 是int &a是地址 所以不能直接赋值
这样应该可以 *p1=(int)&a 或者 p1=&a;
Lonelywolf1899 2010-07-02
  • 打赏
  • 举报
回复
p1[1]=5; //地址 = 5

非法

^_^
BlueMap 2010-07-02
  • 打赏
  • 举报
回复
struct S
{
int i;
int *p;
};
中结构体中的成员是连续存放的 i是四字节 *p也是四字节。
S s;
int *p1=&(s.i);
p1[0]=1;
p1[1]=5;//p1只是指向i,为什么可以p1[1]的?
cout<<p1[1]<<","<<s.p<<endl;
p1[0]中保持了i的地址 p1[1]中保存了*p的地址
p1[0]=1;是将i的值设为1 p1[1]=5是将p的值设为5;
独酌逸醉 2010-07-01
  • 打赏
  • 举报
回复
它们是连续的内存空间。我觉得啊。
Yanger_xy 2010-07-01
  • 打赏
  • 举报
回复
#include <iostream.h>
struct S
{
int i;
int *p;
};
void main()
{
S s;
int *p1=&(s.i);
p1[0]=1; // == *(p1+0);
p1[1]=5;// == *(p1+1)
cout << *(p1+0) << '\t' << *(p1+1) << endl;
cout << &s << endl;
cout<<p1[1]<<","<<s.p<<endl;
}
bulijun1987 2010-07-01
  • 打赏
  • 举报
回复
S结构在32位下就是8个字节,int *p1指针是以4个字节以指向单位的。
wade_2003 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pengzhixi 的回复:]
p1[1]=5;//实际上你是将s.p=(int*)5;
[/Quote]
up~~~~~~~~~~
djjlove_2008 2010-07-01
  • 打赏
  • 举报
回复
#include <iostream.h>
struct S
{
int i;
int *p;
};
void main()
{
S s;
int *p1=&(s.i);
p1[0]=1;
p1[1]=5;//p1只是指向i,为什么可以p1[1]的?
cout<<p1[1]<<","<<s.p<<endl;
}

因为struct S中有两个变量,所以p[0] = s.i, p[1] = s.p;  如果直接int a=9,*p1=&a a已经是一个小得不可再分的单元,还能p[0],p[1]吗?
pengzhixi 2010-07-01
  • 打赏
  • 举报
回复
p1[1]=5;//实际上你是将s.p=(int*)5;

npuhuxl 2010-07-01
  • 打赏
  • 举报
回复
lz你这样试试就会明白了
struct S
{
int i;
int p;
};

void main()
{
S s = {1, 2};
cout<<s.i<<" "<<s.p<<endl;
int *p1=&(s.i);
p1[0]=4;
p1[1]=5;
cout<<s.i<<" "<<s.p<<endl;
}
WaistCoat08 2010-07-01
  • 打赏
  • 举报
回复
int a=9;
ing *p1=&a;

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧