C语言结构体补充(二)

结构体指针的使用

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++;
	}	 
发布了18 篇原创文章 · 获赞 1 · 访问量 1004

猜你喜欢

转载自blog.csdn.net/weixin_43773038/article/details/100639821