首页 > 其他分享 >作业随笔-指针2

作业随笔-指针2

时间:2023-04-16 15:35:19浏览次数:34  
标签:arr name int void cmp 作业 char 随笔 指针

函数指针,数组指针,指针数组,指向函数指针数组的指针,函数指针数组

作业随笔-指针2_i++

6题

(*(char**(*)(char**,char**))0)(char**,char**)

把0强制转换为函数地址指向某个函数,并解引用进行使用,改变函数地址,操作内存,减少内存浪费

函数指针,回调函数

数组元素排序,结构体排序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

/*
int main()
{
	int arr[10] = { 0 };
	int(*p)[10] = &arr;//取出数组的地址

	int(*pf)(int, int);//函数指针
	int(*pfArr[4])(int, int);//pfArr是一个数组-函数指针的数组
	//ppfArr是一个指向函数指数组的指针

	int(*(*ppfArr)[4])(int, int) = &pfArr;
	//ppfArr 是一个数组指针,指针指向的数组有4个元素
	//指向的数组的每个元素的类型是一个函数指针int(*)(int,int)
	return 0;
}
*/
/*
//回调函数
void print(char* str)
{
	printf("hehe:%s", str);
}
void test(void(*p)(char*))
{
	printf("test\n");
	p("bit");
}
int main()
{
	test(print);
	return 0;
}
*/
struct Stu
{
	char name[20];
	int age;
};

int cmp_int(const void* e1, const void* e2)
{
	//比较两个整型值
	return *(int*)e1 - *(int*)e2;
}
void cmp_stu_by_age(const void* e1, const void* e2)
{
	//比较结构体
	return (((struct Stu*)e1)->age - ((struct Stu*)e2)->age);
}
void cmp_stu_by_name(const void* e1, const void* e2)
{
	//比较名字就是比较字符串
	//字符串不能用<>=来比较,应该使用strcmp函数
	return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
void Swap(char* buf1, char* buf2, int width)
{
	int i = 0;
	for (i = 0; i < width; i++)
	{
		char tmp = *buf1;
		*buf1 = *buf2;
		*buf2 = tmp;
		buf1++;
		buf2++;
	}
}

void bubble_sort(void* base, int sz, int width, int (*cmp)(void* e1, void* e2))
{
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (cmp((char*)base + j * width, (char*)base + (j + 1) * width) > 0)
			{
				Swap((char*)base + j * width, (char*)base + (j + 1) * width, width);
			}
		}
	}
}

void test4()
{
	int arr[10] = { 10,9,8,7,6,5,4,3,2,1 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	//使用bubble_sort的程序员一定知道自己排的是什么数据
	//就应该知道如何比较待排序的数据中的元素
	bubble_sort(arr, sz, sizeof(arr[0]), cmp_int);
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}

}

void test5()
{
	struct Stu s[3] = { {"zhangsan",20},{"lisi",30} ,{"wangwu",10} };
	int sz = sizeof(s) / sizeof(s[0]);
	//bubble_sort(s, sz, sizeof(s[0]), cmp_stu_by_age);
	bubble_sort(s, sz, sizeof(s[0]), cmp_stu_by_name);
	int i = 0;
	int w = sizeof(s[0]);
	struct Stu *p;
	
	for (i = 0; i < 3; i++)
	{
		p = &s[i];
		//printf("%s %d ", s[i].name, s[i].age);//结构体打印三种方法
		//printf("%s %d ", (*p).name, (*p).age);
		printf("%s %d ", p->name, p->age);
		
	}
}


int main()
{
	//test4();
	test5();
	return 0;
}




标签:arr,name,int,void,cmp,作业,char,随笔,指针
From: https://blog.51cto.com/u_15906483/6193466

相关文章

  • 【游戏设计随笔03】一些女性向游戏和市场的感悟
    一些女性向tips1:女性市场趋势好,规模逐渐扩大随着一些平台崛起,青少年女性用户有了一个平台可以聚集,最近这一两年低龄女性用户群实现了规模化的效应。聚焦在女性方面不一定会让你游戏的受众群收窄,反而能聚集到非常核心的玩家。2:女性群体更容易被游戏创意所吸引最好做一些比较......
  • 批量下载自己的随笔
    文档说明:只记录关键地方;2023-04-15缘由和意义:东西都在自己手里,平台倒闭还可以迁移数据永远在自己手里,发什么都有自主权可以避免人为刀俎,我为鱼肉的情况无广告、自主可控、打造自己的品牌、高度定制化知道为啥大家自己买硬盘了吧为啥写:汲取了知识,同时也需要回......
  • C指针——知识点集锦
    CPU访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块......
  • linux shell编程作业
    使用for循环语句编写一段B-shell程序,完成显示用户注册目录下的a_sub,b_sub子目录下的所有C程序文件及其目标文件的列表。dirlst="a_subb_sub"foriin$dirlstdocd$HOME/$ils-l*.cdone编写一段shell程序完成:根据从键盘输入的学生成绩,显示相应的成绩标准(分出不及......
  • linux作业
    编写一个Shell脚本,根据键盘可以循环输入文件名,输入不存在文件或是目录名则提示后重新输入,按“q”或“Q”键退出。程序完成找出输入文件中所有含"YiBin"的行按格式“文件名,含YiBin的行”写入当前目录下文件notefile中。while:do read-p"input(q/Q退出):"file if[[$file......
  • 2023/4/12每日随笔
       今天,一天的课,收获满满,上午上了计算机网络,今天讲的主要是ip和mac地址,IP地址提供虚拟地址,mac地址提供物流地址,以及2.5协议,ARP协议,通过这个将ip地址与mac地址很好的连接起来,以及ARP的四种情况,将MAC地址很好的转换起来,后来学习了ip数据报,介绍了ip数据报的格式,各个字段,等等。后......
  • web空指针报500错误
     循环遍历数据遇到空指针,调试,发现转发没错,取出现问题。  后想起,需要先将数据查询,使得先进行转发再取,之前是直接取,所以为空。 将web配置后可行。 ......
  • 2023.04.14 定时测试随笔 T2
    T2P1593因子和传送门:洛谷P1593既然要求因子和,那我们就先对\(a\)分解质因数,得:              \(a=p_1^{k_1}+p_2^{k_2}+p_3^{k_3}...+p_n^{k_n}\)所以\(a^b\)质因数分解就会得到:              \(a^b=p_1^{k_1*b}+p_2^{k_2*b}+......
  • 常量指针 指针常量 const修饰的指针常量
    常量指针指针指向的值不可以修改,指针的指向可以修改指针常量指针指针的指向不可以修改,指针指向的值可以修改const修饰的指针常量指针指向的值和指针的指向均不可以修改指针常量和const修饰的指针常量必须初始化,而常量指针不必初始化1constint*p1;2int*constp2;//错......
  • 2023.04.14 定时测试随笔 T1
    T1P2170选学霸传送门:洛谷P2170本题考察的是并查集优化背包DP,所以我们通过并查集将\(n\)个点变成\(group\)个连通块,那么每个连通块里面的点要么都选要么都不选,状态\(dp[i]\)定义为可以选\(i\)个学霸且不会抗议,算出所有可能的结果,再枚举\(1\)~\(n\),求出最接近\(m......