第六天 结构体的学习

3 篇文章 0 订阅
1 篇文章 0 订阅

写好的程序怎么编译? 01 Linux 终端 02 VS (VS2017会对scanf报错,作为一个最经常用到的函数之一。报错让人蛋疼..............) 为什么没用VC8.0或者 Turbo C。。。可能是这两个工具似乎太落后了,毕竟C语言标准年年更新然而这两个工具好像很久没动了。。今天刚学完结构体,某师,回去用结构体给我做一个简单的通讯录,,,,好吧,第二天自习的时候做了很久,最后灵光一闪参考(chaoxi)了CSDN的大神博客 .......

 下面是第六天学习记录下的代码,部分为编译,可能会报错 。

// 指针练习

	01 定义各种变量的练习
	02 //段错误

▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▉

二阶指针常用的地方

1、函数传参

2、命令行参数

#include <stdio.h>
int main(int argc, char *argv[])
{
	int i;

	printf("%d\n",argc);  

	for (i = 0; i < argc - 1; i++)   //打印命令行参数  /a.out hello word
	{				 //打印出来是 argc argv[1]==hello argv[2] == world  
		printf("%s\n", argv[i + 1]);
	}
	return 0;
}
  

▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▉

  3、使用命令行参数完成冒泡排序


#include <stdio.h>
#include <stdlib.h>

void sort(char *a[], int length)
{
	int i, j;
	char *tmp;

	for (i = 0; i < length - 1; i++)
	{
		for (j = 0; j < length - i - 1; j++)
		{
			if (strcmp(a[j + 1], a[j + 2]) > 0)
			{
				tmp = a[j + 1];
				a[j + 1] = a[j + 2];
				a[j + 2] = tmp;
			}
		}
	}
}

int main(int argc, char *argv[])
{
	int i;

	sort(argv, argc - 1);

	for (i = 0; i < argc - 1; i++)
	{
		printf("%s ", argv[i + 1]);
	}
	printf("\n");

	return 0;
}


▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▉

结构体 (数组缺点,只能保存相同类型的元素)

// 1、结构体的占用字节一定是最长成员的字节数整数倍
// 2、每个成员的偏移量一定是该成员长度的整数倍

	struct StructName
	{
		成员列表列;
	};


	struct StructName
	{
		成员列表列;
	}变量名表列;




▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▉
  	练习1  尝试定义并输出一个结构体
	#include <stdio.h>
	#include <string.h>
	#include <stdlib.h>

	struct student
	{
		char name[20];  //4
		int age;        //4
		char sex;       //1
	};

	typedef struct student Stu;  //将结构体变量名

	int main()
	{
		Stu S1 = { "PENG",20,'m' };
		Stu S2;

		strcpy(S2.name, "GRUE");
		S2.age = 19;
		S2.sex = 'm';

		printf("name %s, age %d, sex %c\n", S1.name, S1.age, S1.sex);
		printf("name %s, age %d, sex %c\n", S2.name, S2.age, S2.sex);

		Stu *S3 = (Stu *)malloc(sizeof(Stu) * 1);
		if (NULL == S3)
		{
			printf("Malloc failure!\n");
		}

		scanf("%s %d %c", S3->name,&S3->age, &S3->sex);
		printf("name %s, age %d, sex %c\n", S3->name, S3->age, S3->sex);
		free(S3);  //释放堆
		return 0;
	}

▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅

	// 结构体中使用指针,需再次给指针分配内存空间 malloc两次,free两次
	// free


▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▉
 //结构体数组
	#include <stdio.h>

	struct student
	{
		char name[20];  //20
		int age;        //4
		char sex;       //1    定义一个结构体
	};
	typedef struct student stu;  //将结构体变量名

	int main()
	{
		int i;
		stu s[5];       //定义一个结构体数组,用循环将其赋值

		for(i =0; i < sizeof(s)/sizeof(s[0]); i++)  //输入五组.0
		{
			scanf("%s %d %c",s[i].name,&s[i].age,&s[i].sex);
		}

		for(i =0; i < sizeof(s)/sizeof(s[0]); i++)
		{
			printf("%s %d %c\n",s[i].name,s[i].age,s[i].sex);
		}
		return 0;
	}





▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▉
    //通讯录   增(人的信息) 改(修改信息) 查(根据姓名查看其他信息) 删  
	//使用结构体数组来写


   // 思考 通讯录个人信息应用结构体存储  应包含 姓名 (字符串)  电话号码(字符串) 住址(字符串)







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值