结构体指针的使用
1.
(1)指针指向结构体
(2)指针指向结构体数组
(3)以结构体指针作为参数对结构体数组进行排序以及筛选
#include<stdio.h>
#include<string.h>
#define N 3
typedef struct
{
int a;
char b[10];
int num;
}structure;
structure max(structure st[])
{
int i,m=0;
for(i=0;i<N;i++)
{
if(st[i].a>st[m].a) m = i;
}
//printf("m is:%d\n",m);
//printf("The maxtest is:%d,%s,%d\n",st[1].a,st[1].b,st[1].num);
return st[m];
}
structure sort(structure st[])
{
int i,k;
structure temp;
for(i=0;i<N-1;i++)
{
for(k=i;k<N-1;k++)
{
if(st[k]>st[k+1])
{
temp = st[k];
st[k] = st[k+1];
s[k+1] = temp;
}
}
}
return st;
}
int main()
{
structure *s;
structure st[3] = {{1,"dudezheng",161403305},{2,"chiying",111111111},{3,"dujuzi",88888888}};
printf("%d,%s,%d\n",st[0].a,st[0].b,st[0].num);
printf("The init is:%d,%s,%d\n ",st[1].a,st[1].b,st[1].num);
s = st;
printf("%d\n",(*s).num); //*s is equal to st
printf("%s\n",s->b); //s-> is equal to str.
s++;
printf("%s\n",s->b); //s-> is equal to str.
structure *s1;
s1 = (structure*)st[0].b;
printf("%s\n",s1);
printf("%s\n",s1+1);
//structure m = max(--s); //at 34th line "s++"
structure m = max(st);
printf("The max is:%d,%s,%d\n ",m.a,m.b,m.num);
return 0;
}
2.对结构体数组的排序
(1)
#include<stdio.h>
#include<string.h>
#define N 3
typedef struct
{
int a;
char b[10];
int num;
}structure;
structure* sort(structure st[])
{
int i,k;
structure temp;
for(i=0;i<N-1;i++)
{
for(k=i;k<N-1;k++)
{
if(st[k].a>st[k+1].a)
{
temp = st[k];
st[k] = st[k+1];
st[k+1] = temp;
}
}
}
return st;
}
int main()
{
int j = 0,i;
structure st[N] = {{2,"chiying",111111111},{1,"dudezheng",161403305},{3,"dujuzi",88888888}};
for(i=0;i<N;i++)
{
printf("%d,%s,%d\n",st[i].a,st[i].b,st[i].num);
}
structure *stu = sort(st);
for(i=0;i<N;i++)
{
j++;
printf("The %dth is:%d,%s,%d\n",j,stu->a,stu->b,stu->num);
stu++;
}
return 0;
}
(2)数组越界问题
for(i=0;i<N;i++) //不能用for(stu != NULL)数组越界以后不一定是NULL,这个一般用在链表遍历的时候(动态存储分配,分配的时候都是指针放到NULL)。
{
j++;
printf("The %dth is:%d,%s,%d\n",j,stu->a,stu->b,stu->num);
stu++;
}