鱼C论坛

 找回密码
 立即注册
查看: 4020|回复: 6

C结构体问题

[复制链接]
发表于 2013-1-28 11:38:46 | 显示全部楼层 |阅读模式
5鱼币
+#include<stdio.h>
struct entry
{int datd;
int *ip;
};
main()
{
int i;
struct entry v;
v.ip=&i;
v.data=100;
*v.ip=50;
printf("%d %d %d\n",v.data.*v.ip.i);
}
输出是100 50 50 为什么最后输出也是50?

最佳答案

查看完整内容

v.data 和 *v.ip 的值应该没有问题哦,100和50。对于i的值,i的地址被赋予ip指针,而*v.ip就是对那个地址赋值,所以*v.ip 就等于 i,所以i的值也为50.
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-28 11:38:47 | 显示全部楼层
v.data 和 *v.ip 的值应该没有问题哦,100和50。对于i的值,i的地址被赋予ip指针,而*v.ip就是对那个地址赋值,所以*v.ip 就等于 i,所以i的值也为50.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-28 12:31:44 | 显示全部楼层
你的代码有错
请改正后再请鱼油进行解答

C:\Documents and Settings\Administrator\桌面\IDE及MSDN\驱动和EXE通讯直接访问模式\test.cpp(11) : error C2039: 'data' : is not a member of 'entry'
        C:\Documents and Settings\Administrator\桌面\IDE及MSDN\驱动和EXE通讯直接访问模式\test.cpp(3) : see declaration of 'entry'
C:\Documents and Settings\Administrator\桌面\IDE及MSDN\驱动和EXE通讯直接访问模式\test.cpp(13) : error C2039: 'data' : is not a member of 'entry'
        C:\Documents and Settings\Administrator\桌面\IDE及MSDN\驱动和EXE通讯直接访问模式\test.cpp(3) : see declaration of 'entry'
C:\Documents and Settings\Administrator\桌面\IDE及MSDN\驱动和EXE通讯直接访问模式\test.cpp(13) : error C2228: left of '.i' must have class/struct/union type
C:\Documents and Settings\Administrator\桌面\IDE及MSDN\驱动和EXE通讯直接访问模式\test.cpp(14) : warning C4508: 'main' : function should return a value; 'void' return type assumed
执行 cl.exe 时出错.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-28 16:30:24 | 显示全部楼层

#include<stdio.h>
struct entry
{int datd;
int *ip;
};
main()
{
int i;
struct entry v;
v.ip=&i;
v.data=100;
*v.ip=50;
printf("%d %d %d\n",v.data.*v.ip.i);
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-28 17:40:47 | 显示全部楼层
绝影&瞬风 发表于 2013-1-28 16:30
#include
struct entry
{int datd;

你又打错了。。
下次还是用复制+粘贴把。。
  1. #include<stdio.h>
  2. struct entry
  3. {int data;
  4. int *ip;
  5. };
  6. main()
  7. {
  8. int i;//定义变量i,我们假设I变量对应的虚拟地址是0x0013ff7c
  9. struct entry v;
  10. v.ip=&i;//好的,这句话的作用就是让v.ip=0x0013ff7c

  11. v.data=100;//不解释了哈
  12. *v.ip=50;//∵v.ip=0x0013ff7c ∴*v.ip赋值相当于对变量i进行赋值,理由:他们的虚拟地址是相同滴
  13. //于是i=50
  14. printf("%d %d %d\n",v.data,*v.ip,i);//就是这样所以得到上面的值100 50 50
  15. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-28 22:03:47 | 显示全部楼层
*v.ip=50;这个相当于给i赋值,5楼讲得很详细。自己可以画画内存图。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-2-2 15:10:59 | 显示全部楼层
????????????????????/{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-8 18:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表