鱼C论坛

 找回密码
 立即注册
查看: 983|回复: 10

[已解决]求助 数据结构选择题

[复制链接]
发表于 2020-3-2 18:45:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
struct st
{   
int n;
struct st *next;
};
struct st a[3]={5, &a[1], 7, &a[2], 9, '\0' }, *p;
p=&a[0];
则以下输出值为6的是(D)。
A.printf("%d\n",p++->n);         
B.printf("%d\n",p->n++);      
C.printf("%d\n",(*p).n++);        
D.printf("%d\n",++p->n);

求助          正确答案为什么是D
个人理解:结构体内部定义了*next 也没有说明next指向下一个st 所以没形成单链表
                语句:struct st a[3]={5, &a[1], 7, &a[2], 9, '\0' }, *p; 中 a[1]=&a[1] 那么 a[1]中存放的应该是一个地址 也没赋值a[1]->n的操作
                          为什么指针指向这个地址时候 里面的内容是6呢 这个6是怎么来的
最佳答案
2020-3-2 19:14:13
本帖最后由 4goodworld 于 2020-3-2 19:15 编辑

就像 printf("%d",n++) 和printf("%d",++n)
如果n=1的话,前者打印1,后者是2
原因就是前者是先返回n,然后n+1
而后者是先n+1,然后返回n+1的值,也就是2
所以D,就很好理解了
D.printf("%d\n",++p->n);
p->n=5
p->n+1=6
返回6

3.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-2 18:55:59 | 显示全部楼层
优先级不一样吧
试试下面的
printf("%d\n",++p->n);
   printf("%d\n",(++p)->n);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 19:14:13 | 显示全部楼层    本楼为最佳答案   
本帖最后由 4goodworld 于 2020-3-2 19:15 编辑

就像 printf("%d",n++) 和printf("%d",++n)
如果n=1的话,前者打印1,后者是2
原因就是前者是先返回n,然后n+1
而后者是先n+1,然后返回n+1的值,也就是2
所以D,就很好理解了
D.printf("%d\n",++p->n);
p->n=5
p->n+1=6
返回6

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 19:41:47 | 显示全部楼层
-> 指向的优先级 是 大于 ++运算符的
最后尝试输出 p->n, p->n 的数值是9  这是为什么呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 19:42:40 | 显示全部楼层
如图
4.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-2 20:21:06 | 显示全部楼层
4goodworld 发表于 2020-3-2 19:14
就像 printf("%d",n++) 和printf("%d",++n)
如果n=1的话,前者打印1,后者是2
原因就是前者是先返回n,然 ...

= =还是有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 21:17:27 | 显示全部楼层

p++或者++p,会让p的值变化,p变了,指向的内容当然有所变化啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 22:03:03 | 显示全部楼层
4goodworld 发表于 2020-3-2 21:17
p++或者++p,会让p的值变化,p变了,指向的内容当然有所变化啦

p++->n  是先进行  p->n 然后再p++  
所以输出的还是p—>n  
所以 p++->n  和 p->n 不应该一样吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 22:09:14 | 显示全部楼层
KrisWang 发表于 2020-3-2 22:03
p++->n  是先进行  p->n 然后再p++  
所以输出的还是p—>n  
所以 p++->n  和 p->n 不应该一样吗


我说的p会变化,是基于你图片中的几个问题,为啥6 7 7 9,
举例从7->9这个问题,我想表达的意思是p因为++的原因,即便当初pirntf打印结果没有变换,但是终是改变了p的值,所以后面再打印p->n的结果就会有变化,最后一个输出的就是9,有啥问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 22:21:55 | 显示全部楼层
4goodworld 发表于 2020-3-2 22:09
我说的p会变化,是基于你图片中的几个问题,为啥6 7 7 9,
举例从7->9这个问题,我想表达的意思是p因 ...

没问题了! 谢谢老哥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 13:44:05 | 显示全部楼层
本帖最后由 Cool_Breeze 于 2020-3-3 14:20 编辑
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #define SIZE sizeof(struct test)
  4. typedef struct test
  5. {
  6.         int n;
  7.         struct test *next;
  8. }*P;
  9. int main()
  10. {
  11.         P begin,end,head;
  12.         head=begin=end=(P)malloc(SIZE);
  13.         int i=0;
  14.         for (i=5;i<10;i+=2)
  15.         {
  16.                 begin->n=i;
  17.                 end=(P)malloc(SIZE);
  18.                 begin->next=end;
  19.                 begin=end;
  20.         }
  21.         end->next=NULL;
  22.         begin=head;
  23.         /*
  24.         对象指针->成员名 (结合性:左到右) 优先级 1
  25.         ++变量名 (结合性:右到左)优先级 2
  26.         */
  27.         for (;head->next;head=head->next)
  28.         {
  29.                 printf("%d\n",head->n);
  30.         }
  31.         printf("%d\n",++begin->n);
  32.         return 0;
  33. }
复制代码
  1. 5
  2. 7
  3. 9
  4. 6

  5. --------------------------------
  6. Process exited after 0.005771 seconds with return value 0
  7. 请按任意键继续. . .
复制代码
运算符的优先级和结合性
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 22:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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