题一
struct st{int x;int*y;}*pt;
int a[]={1,2},b[]={3,4};
struct st c[2]={10,a,20,b};
pt=c
//以下选项中表达式值为11的是
//A) ++pt->x
//B) pt->x
//C) *pt->y
//D) (pt++)->x
题二
#include <stdio.h>
typedef struct{int num;char name[10];int score;}PER;
void fun(PER x[])
{
int t;
if(x[0].score>x[1].score)
{
t=x[0].score;x[0].score=x[1].score;x[1].score=t;
}
}
main()
{
PER s[2]={{1001,"zhang",621},{1002,"wang",585}};
int i;
fun(s);
for(i=0;i<2;i++)
printf("%d,%s,%d,",s[i].num,s[i].name,s[i].score);
}
下面是我的理解,供你参考:
#include <stdio.h>
typedef struct{int num;char name[10];int score;}PER;
void fun(PER x[])
{
int t;
if(x[0].score>x[1].score)
{
t=x[0].score;x[0].score=x[1].score;x[1].score=t;
}
}
main()
{
PER s[2]={{1001,"zhang",621},{1002,"wang",585}};
int i;
//调用fun函数的作用是按从大到小时排序结构指针指向的当前结构(x[0])和后面一个结构 (x[1])的值
fun(s);
//然后打印排序后的结构数组
for(i=0;i<2;i++)
printf("%d,%s,%d,",s[i].num,s[i].name,s[i].score);
struct st{int x;int*y;}*pt;
int a[]={1,2},b[]={3,4};
struct st c[2]={10,a,20,b};
pt=c;
// printf("\n%d\n",++pt->x) ;
//以下选项中表达式值为11的是
//根据运算符优先级,先执行pt->x ,
//pt为结构指针,其地址为 第一个结构的地址,所以pt>x 值一个结构的x,即10
//然后执行前缀++操作,10变成11,所以答案是A。
//A) ++pt->x
//10
// printf("pt->x=%d\n",pt->x);
//这里pt同上指向第一个结构,然后pt->x为第一个结构的x的值,即10
//B) pt->x
//1
//pt->y的优先级大于*,所以先执行pt->y,
//又pt->y为第一个结构的int指针y,即指针a,后面执行*pt->y的结果为数组a的首地址指向int的值,即1
// printf("*pt->y=%d\n",*pt->y);
//C) *pt->y
//10
//这里我如果理解错误的话应该同样先执行->x,然后执行(pt++),这里pt++为使用pt的值后再增加pt++的值,
//所以 (pt++)->x的结果是第一个结构的x的值,即10,然后pt指向下一个结构。
printf("(pt++)->x=%d\n",);
//D) (pt++)->x
}
最好的理解方式还是自己debug一下,这里我简单解释一下
第一题
struct st{int x;int*y;}*pt; ####定义结构体st和该结构体的一个指针pt
int a[]={1,2},b[]={3,4}; ####定义两个数组,为结构体里的y做准备
struct st c[2]={10,a,20,b}; #####定义结构体数组c,进行初始化
pt=c ####将数组c的首地址赋给pt,此时pt便是指向c[0]
所以选择a项
解析:
//以下选项中表达式值为11的是
//A) ++pt->x //pt->x=c[0].x=10,自增加一
//B) pt->x //解释如上此时为10
//C) *pt->y //该式等价于c[0].y[0]=a[0]=1
//D) (pt++)->x // 由于括号,p先赋值再后移一个,等价于B
题二
第二题比第一期还简单,全局定义了一个结构体per,从主函数进入,定义了一个结构体数组s[2]初始化,然后fun函数就是比较该结构体数组里,第一个的分数是不是比第二个大,大的话就把他两的分数交换一下,然后输出
这就是结构体的数组,第一题选A,->优先级大于++,所以先取值取到10后++变为11。第二题跟第一题差不多,就是把结构体数组当参数传进去按分数从低到高排序