求助 数据结构选择题
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是怎么来的
优先级不一样吧
试试下面的
printf("%d\n",++p->n);
printf("%d\n",(++p)->n); 本帖最后由 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
-> 指向的优先级 是 大于 ++运算符的
最后尝试输出 p->n, p->n 的数值是9这是为什么呢
如图 4goodworld 发表于 2020-3-2 19:14
就像 printf("%d",n++) 和printf("%d",++n)
如果n=1的话,前者打印1,后者是2
原因就是前者是先返回n,然 ...
= =还是有问题 KrisWang 发表于 2020-3-2 19:42
如图
p++或者++p,会让p的值变化,p变了,指向的内容当然有所变化啦 4goodworld 发表于 2020-3-2 21:17
p++或者++p,会让p的值变化,p变了,指向的内容当然有所变化啦
p++->n是先进行p->n 然后再p++
所以输出的还是p—>n
所以 p++->n和 p->n 不应该一样吗 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,有啥问题? 4goodworld 发表于 2020-3-2 22:09
我说的p会变化,是基于你图片中的几个问题,为啥6 7 7 9,
举例从7->9这个问题,我想表达的意思是p因 ...
没问题了! 谢谢老哥 本帖最后由 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]