KrisWang 发表于 2020-3-2 18:45:07

求助 数据结构选择题

struct st
{   
int n;
struct st *next;
};
struct st a={5, &a, 7, &a, 9, '\0' }, *p;
p=&a;
则以下输出值为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={5, &a, 7, &a, 9, '\0' }, *p; 中 a=&a 那么 a中存放的应该是一个地址 也没赋值a->n的操作
                        为什么指针指向这个地址时候 里面的内容是6呢 这个6是怎么来的

最后的魁拔 发表于 2020-3-2 18:55:59

优先级不一样吧
试试下面的
printf("%d\n",++p->n);
   printf("%d\n",(++p)->n);

4goodworld 发表于 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

KrisWang 发表于 2020-3-2 19:41:47

-> 指向的优先级 是 大于 ++运算符的
最后尝试输出 p->n, p->n 的数值是9这是为什么呢

KrisWang 发表于 2020-3-2 19:42:40

如图

KrisWang 发表于 2020-3-2 20:21:06

4goodworld 发表于 2020-3-2 19:14
就像 printf("%d",n++) 和printf("%d",++n)
如果n=1的话,前者打印1,后者是2
原因就是前者是先返回n,然 ...

= =还是有问题

4goodworld 发表于 2020-3-2 21:17:27

KrisWang 发表于 2020-3-2 19:42
如图

p++或者++p,会让p的值变化,p变了,指向的内容当然有所变化啦

KrisWang 发表于 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 不应该一样吗

4goodworld 发表于 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,有啥问题?

KrisWang 发表于 2020-3-2 22:21:55

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

没问题了! 谢谢老哥

Cool_Breeze 发表于 2020-3-3 13:44:05

本帖最后由 Cool_Breeze 于 2020-3-3 14:20 编辑

#include <stdio.h>
#include <malloc.h>
#define SIZE sizeof(struct test)
typedef struct test
{
        int n;
        struct test *next;
}*P;
int main()
{
        P begin,end,head;
        head=begin=end=(P)malloc(SIZE);
        int i=0;
        for (i=5;i<10;i+=2)
        {
                begin->n=i;
                end=(P)malloc(SIZE);
                begin->next=end;
                begin=end;
        }
        end->next=NULL;
        begin=head;
        /*
        对象指针->成员名 (结合性:左到右) 优先级 1
        ++变量名 (结合性:右到左)优先级 2
        */
        for (;head->next;head=head->next)
        {
                printf("%d\n",head->n);
        }
        printf("%d\n",++begin->n);
        return 0;
}
5
7
9
6

--------------------------------
Process exited after 0.005771 seconds with return value 0
请按任意键继续. . .运算符的优先级和结合性
页: [1]
查看完整版本: 求助 数据结构选择题