结构体

结构体变量的使用

赋值和初始化

  1. 定义的同时可以整体赋初值
  2. 定义完成后,只能单个的赋初值

如何去除结构体变量中的每一个成员

  1. 结构体变量名.成员名
  2. 指针变量名->成员名
    指针变量名->成员名 在计算机内部会被转化成 (*指针变量名).成员名
例子

第一种方式初始化

#include <stdio.h>
struct student{
	int age ;
	float score ;
	char sex;
}; 
int main ()
{
	struct student st1={80,55.5,'F'};   //定义的同时初始化
	struct student st2; 			    //定义完之后在初始化 
	st2.age=10;
	st2.score=44.2;
	st2.sex='f'; 		
	printf("%d %f %c\n",st1.age,st1.score,st1.sex);
	printf("%d %f %c",st2.age,st2.score,st2.sex);
	return 0 ;
}

第二种方式初始化

#include <stdio.h>
struct student{
	int age ;
	float score ;
	char sex;
}; 
int main ()
{
	struct student st={55,22.2,'F'};
	struct student *p = &st2;
	p->age = 88 ; //p->在计算机内部会被转化成(*p).age (硬性规定) 
	// p->age 等价于 (*p).age 等价于 st.age 
	p->score = 77.7;
	p->sex = 'F';
	printf("%d %f %c",p);
	return 0 ;
}

总结

  1. p->age 在计算机内部会被转化成(*p).age 这是一种硬性规定
  2. p->age 等价于 (*p).age 等价于 st.age
  3. 所以我们知道p->age 等价于 st.age 是因为p->age 被转化成了(*p).age来执行

结构体变量和结构体变量指针作为函数参数传递的问题

调用函数时发送地址还是发送内容

示例

#include <stdio.h>
#include <string.h>
struct student {
	char name[10];
	float score ;
	char sex ;
};
void Inputstudent(struct student  *p_1);
void Outputstudent(struct student p_2);//值传递输出 
/*
要是在函数内部进行输出既可以选择通过
地址来输出,也可以同过值传递(拷贝)
来进行输出。 
*/ 
int main()
{
	struct student stu;
	
	Inputstudent (&stu);     //对结构体变量的输入 
	/* 
	输入时 只能发送stu的地址(即 Inputstudent(&stu)),
	不能发送stu本身(即 Inputstudent(stu)),因为在
	函数中“值的传递 ”等待该函数运行结束后形参所接受的
	实参(即实参的一个拷贝)会自动释放掉。传递地址不会出
	现这种情况。 
	*/ 
	Outputstudent (stu);	 //对结构体变量的输出 
	/*
	   通过地址来输出时,需要将stu的地址发送给*p_2 
	   Outputstudent (&stu); 
	*/ 
	return 0 ;
	
 } 
 void Inputstudent (struct student *p_1)
 {
 	
 	strcpy(p_1->name,"严乐"); 
	p_1->score = 55.2 ; // 或者 (*p_1).score 或者 stu.score 
	p_1->sex = 'F'; 
 	
 }
 void Outputstudent (struct student p_2)//值传递输出(在函数内部进行输出) 
 {
 	printf("%s %f %c\n",p_2.name,p_2.score,p_2.sex);
 }
 /*
 	通过地址传递来输出(发送stu内容中前四个字节的地址给*p_2) 
	void Outputstudent (struct student *p_2)
	{
		printf("%s %f %c",p_2->name,p_2->score,p_2->sex);
	} 
 */
 

最好使用结构体指针变量作为函数参数来传递结构体变量的运算

结构体变量的运算

struct student {
  int a ;
};
int main (void)
struct student stu1,stu2;
st1 + st1   st1*st2    st1/st2  //错误
st1 = st2   st2 = st1           //正确  
int main ()
  • 冒泡排序
#include <stdio.h>
void sort(int *pArr , int  len);

int main (void)
{
	int a[5] = {10,2,33,-1,2};
	int i ; 
	
	sort (a , 5);
	
	for(i = 0 ; i < 5 ; i ++)
	printf("%3d",a[i]);
	
	return 0 ;
}
void sort(int *pArr , int len)
{
	int i , j , t ; 
	for(i = 0 ; i < len - 1 ; i ++)
		for (j = 0 ; j < len-1-i ; j ++)
		{
			if(pArr[j] > pArr[j+1])
			{
				t = pArr[j+1];
				pArr[j+1] = pArr[j];
				pArr[j] = t ;
			}
		}
}





			
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值