C语言高级代码

拟墨画扇 提交于 2019-12-24 06:45:04

指针

  • C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针便是保存这个地址的变量。也就是说:指针是一种保存变量地址的变量。
#include<stdio.h>
int main()
{
	int a=2,b=6,c=10,d=8,e=4;
	//取地址运算符
	int *pa=&a;
	int *pb=&b;
	int *pc=&c;
	int *pd=&d;
	int *pe=&e;
	printf("%#X %#X %#X %#X %#X\n",pa,pb,pc,pd,pe);


	//取值运算符
	printf("%d %d %d %d %d\n",*pa,*pb,*pc,*pd,*pe);

	return 0;
}
  • 指针访问数组
#include<stdio.h>
//下标法
/*
int main()
{
	int a[12]={2,3,6,5,8,0,9,4,1,7,11,20};
	for(int i=0;i<12;i++)
	{
	printf("%d\n",a[i]);
	}
	return 0;
}
*/

//本质偏移法
/*
int main()
{
	int a[12]={2,3,6,5,8,0,9,4,1,7,11,20};
	for(int i=0;i<12;i++)
	{
	printf("%d\n",*(a+i));
	}
	return 0;
}
*/

//指针法

int main()
{
	int a[12]={2,3,6,5,8,0,9,4,1,7,11,20};
	int *p=a;
	for(int i=0;i<12;i++)
		printf("%d\n",p[i]);


	for(int j=0;j<12;j++)
	{
		printf("%d\n",*(p+j));
	}

	for(int x=0;x<12;x++)
		printf("%d\n",*p++);

	return 0;
}


//二维数组
//下标法
/*
int main()
{
	int a[3][4]={2,5,4,8,9,1,3,7,6,10,12,21};
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<4;j++)
		{
			printf("%d\t",a[i][j]);
		}
		printf("\n");
	}
	return 0;
}
*/
/*
int main()
{
	int a[3][4]={2,5,4,8,9,1,3,7,6,10,12,21};
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<4;j++)
		{
			printf("%d\t",*(*(a+i)+j));
		}
		printf("\n");
	}
	return 0;
}
*/

结构体

  • 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
  • 结构体初始化
#include<stdio.h>
#include<string.h>
struct stu
{
	char *name; //char name[10];
	int num;
	char sex;
	float score;
};
int main()
{
	//方法一:定义时赋值
	//struct stu s={"fangwei",1001,'m',99};
	//方法二:定义后逐个赋值

	/*
	struct stu s;
	s.name="fangwei"; //strcpy(s.name,"fangwei");
	s.num=1001;
	s.sex='m';
	s.score=99;
	*/

	//指定赋值
	
	struct stu s={.name="fangwei",.num=1001,.sex='m',.score=99};

	printf("name:%s\n",s.name);
	printf("num:%d\n",s.num);
	printf("sex:%c\n",s.sex);
	printf("score:%.1f\n",s.score);


	return 0;
}
  • 结构体嵌套
#include<stdio.h>
int main()
{
	struct time
	{
		int hour;
		int min;
		int sec;
	};
	struct stu
	{
		char name[30];
		int num;
		float score;
		struct time TIME;
	};
	struct stu STU={"fangwei",1001,99,{13,23,44}};
	printf("STU.name=%s\n",STU.name);
	printf("num=%d\n",STU.num);
	printf("score=%f\n",STU.score);	
	printf("hour=%d\n",STU.TIME.hour);
	printf("min=%d\n",STU.TIME.min);
	printf("sec=%d\n",STU.TIME.sec);

	return 0;
}
  • 结构体数组遍历
#include<stdio.h>
int main()
{
	struct stu
	{
		char *name;	//char name[20];
		int num;
		char sex;
		float score;
	}s[4]={{"tangseng",1001,'m',99},{"wukong",1002,'m',88},{"bajie",1003,'m',44},{"sha",1004,'m',66}};
	/*ef struct stu
	{
		char *name;	//char name[20];
		int num;
		char sex;
		float score;
	}Stu;
	Stu s[4]={{"tangseng",1001,'m',99},{"wukong",1002,'m',88},{"bajie",1003,'m',44},{"sha",1004,'m',66}};
	*/
	for(int i=0;i<4;i++)
	{
		printf("num:  %d\n",s[i].num);
		printf("sex:  %c\n",s[i].sex);
		printf("score:%f\n",s[i].score);
		printf("\n");
	}
	
	return 0;
}

  • 利用结构体,实现投票功能
#include<stdio.h>
#include<string.h>
typedef struct pe
{
	char name[30];
	int votecount;
}candidate;
void vote(candidate * c,int n)
{
	for(int i=0;i<3;i++)
	{
		printf("name:%s votecount:%d\n",c[i].name,c[i].votecount);
	}
}
int main()
{
	candidate can[3]=
	{
		{"wang",0},
		{"fang",0},
		{"tao",0},
	};
	int count=0;
	char Name[1000];
	for(int j=0;j<10;j++)
	{
		
		printf("请输入你要投的人:");
		scanf("%s",Name);
		int flag=1;
		for(int i=0;i<3;i++)
		{
			if(strcmp(Name,can[i].name)==0)
			{	
				can[i].votecount++;
				flag=0;
			}
		}
		if(flag==1)
		{
			count++;
		}
		

	}

	vote(can,3);
	printf("弃权票:%d\n",count);
	int max=can[0].votecount;
	int idx;
	for(int i=1;i<3;i++)
	{
		if(max<can[i].votecount)
		{
			max=can[i].votecount;
			idx=i;
		}
	}
	printf("%s获胜!\n",can[idx].name);

	return 0;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!