C语言结构体

#include<stdio.h>
void main()
{
union{
int a;
int b;
}s[3],*p;
int n=1,k;
for(k=0;k<3;k++){
s[k].a=n;
s[k].b=s[k].a*2;
n+=2;
}
p=s;
printf("%d,%d\n",p->a,++p->a);
}
最后输出的是3,3
那for循环里面的赋值过程是什么

#include <stdio.h>
struct person
{
char name[10];
int num;
};

void main()
{
struct person per[5];
void sort(struct person *, int );
int i;
printf("print letter:\n");
for(i=0;i<5;i++)
{
printf("name: ");
scanf("%s", &per[i].name);
printf("num: ");
scanf("%d", &per[i].num);
}
sort(per, 5);
for(i=0;i<5;i++)
printf("print: %s%d\n", per[i].name, per[i].num);
getch();
}

void sort(struct person *a, int n)
{
int i,j,t;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i].num>a[j].num)
{
t=a[i].num; /*你代码中i写成j,这是细节问题*/
a[i].num=a[j].num;
a[j].num=t;
}
}

你代码有点问题,我给你改了改。TC测试通过。
除了注视的地方,还有几点要注意:
你源代码传送的是per[0].num的地址,记:a[0],但是a[1]的地址不等于
per[1].num的地址。
指针加1的意思你没理解好。
举个列子。
int a[10];
那么*(a+1)的意思是把a地址向后移动sizeof(int)个位。
所以你那个&a[1]指向的还是结构体中的数据。(恩,这里体现了低级语言的特性。每一个内存的每一位都要考虑到。要是你写个程序:200位的浮点数加法计算机,你更能体会到什么叫做考虑到每一位内存,调试的时候要一个内存一个内存的演算。代码我的baidu空间里有,可以自己去看)

不懂的问
温馨提示:答案为网友推荐,仅供参考
相似回答