【C语言】函数、内存空间划分、指针练习题以及知识导图

知识导图



函数、内存空间划分、指针练习题


1.在堆区申请两个长度为32的空间,实现两个字符串的比较(非库函数实现)
要求:
1>定义函数,在堆区申请空间(两个申请,主函数需要调用2次)
2>定义函数,实现字符串的输入void input(char *p)
3>调用函数实现字符串比较,在主函数中输出大小:
int my_strcmp(const char *s1,const char *s2)
4>定义函数,释放空间

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

//定义函数,在堆区申请空间
void my_malloc(char **str) 		
//函数的形参是局部变量,存在栈区,函数执行结束会自动释放空间
//这里用二级指针就不会把传进来的堆区字符串指针释放掉了
{
	*str=(char*)malloc(32);
}

//定义函数,实现字符串的输入
void input(char *p)
{
	scanf("%s",p);
}

//定义函数,实现字符串比较,返回大小
int my_strcmp(const char *s1,const char *s2)
{
	char *p1=s1,*p2=s2;
	while(*p1!='\0')
	{
		if(*p1!=*p2)
		{
			break;
		}
		p1++;
		p2++;
	}
	if(*p1>*p2)
	{
		printf("%s比%s大\n",s1,s2);
	}else if(*p1<*p2)
	{
		printf("%s比%s大\n",s2,s1);
	}else
	{
		printf("%s和%s一样大\n",s1,s2);
	}
	return *p1-*p2;
}

//定义函数,释放空间
void my_free(void **p)
//函数的形参是局部变量,存在栈区,函数执行结束会自动释放空间
//这里用二级指针就不会导致重复释放传进来的堆区地址指针了
{
	//释放空间
	free(*p);
	//防止野指针,需要把释放后的指针指向置空
	*p=NULL;
}

int main(int argc, const char *argv[])
{
	typedef char *STR; 		//使用了类型重定义
	STR str1; 				//初始化定义了两个字符串
	STR str2;
	my_malloc(&str1); 		//调用函数申请两个长度为32字节大小的空间
	my_malloc(&str2);

	//调用函数输入两个字符串
	input(str1);
	input(str2);
	//输出两个字符串
    puts(str1);  		
	puts(str2);

	//调用比较两个字符串的函数
	printf("比较字符串大小函数返回值:%d\n",my_strcmp(str1,str2));
	
	//调用函数释放空间
	my_free(&str1);
	my_free(&str2);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值