指针数组小练习

1.实现数组内容的逆序

#include <stdio.h>
#include <string.h>
void reser(char *str,int len)
{
	int left=0;
	int right =len-2;
	while(left<right)
	{
		char tmp=*(str+left);
		*(str+left)=*(str+right);
		*(str+right)=tmp;
		left++;
		right--;
	}
}
int main()
{
	char str[]="xwd yyds";
	int len = sizeof(str)/sizeof(str[0]);
	printf("%s\n",str);
	reser(str,len);
	printf("%s\n",str);
	return 0;
}

 

 2.实现字符串的复制

#include <stdio.h>
char* mystrcpy(char *dest,const char* src)
{
	char *bak=dest;
	while(*src!='\0')
	{
		*dest++=*src++;
	}
	*dest='\0';
	return bak;
}
int main()
{
	char *p="xwd yyds";
	char str[64]={0};
	mystrcpy(str,p);
	printf("%s",str);
	return 0;
}

 3.实现字符串的复制(复制指定的数量)

#include <stdio.h>

char* mystrcpy(char *dest,const char* src,int len)
{
	char *bak=dest;
	while(*src!='\0' &&len>0)
	{
		*dest++=*src++;
		len--;
	}
	*dest='\0';
	return bak;
}
int main()
{
	char *p="xwd yyds";
	char str[64]={0};
	int num=0;
	printf("请输入要复制的数量:");
	scanf("%d",&num);
	mystrcpy(str,p,num);
	printf("%s",str);
	return 0;
}

 

 3.初始化数组,并全部遍历输出

#include <stdio.h>


void Initarr(int *arr,int len)
{
	for(int i=0;i<len;i++)
	{
		printf("请输入第%d个数:",i+1);
		scanf("%d",(arr+i));
	}
}
void listarr(int *arr,int len)
{
	for(int i=0;i<len;i++)
	{
		printf("%d ",*(arr+i));
	}
}
int main()
{
	int numarr[10]={0};
	int len =sizeof(numarr)/sizeof(numarr[0]);
	Initarr(numarr,len);
	listarr(numarr,len);
	return 0;
}

 

4. 分析 (*( void (*) () )0)( ); (-----来自C陷阱与缺陷)

 

 总结:把0强制转换类型变成void (*) ()函数指针类型,再对其调用

5.分析 void (*signal (int,void(*)(int) ) )(int); (-----来自C陷阱与缺陷)

总结:这是对函数signal的声明,signal的返回值是函数指针,该函数指针指向的函数返回值是void,参数是int,而 signal的参数有两个,第1个是int,第二个是函数指针,该函数指针指向的函数的返回值是void,参数是int;

6. 实现 mystrncat()函数,实现将指定数量的字符粘贴到指定字符串后面

#include <stdio.h>
#include <string.h>
char *mystrncat(char *dest,const char *src,int len)
{
	char *bak=dest;
	while(*dest!='\0')
	{
		dest++;
	}
	while((*dest++=*src++)!='\0' &&--len>0);
	*dest='\0';
	return bak;
}
int main()
{
	char str[64]="xwd";
	const char *p=" yyds";
	mystrncat(str,p,4);
	printf("%s\n",str);
	return 0;
}

7.模仿strcmp实现 mystrcmp函数 实现字符串的比较 

 

#include <stdio.h>
#include <string.h>
int mystrcmp(char *p1,char *p2)
{
	while((*p1^*p2)==0 && *p1!='\0' &&*p2!='\0') 
	{
		p1++;
		p2++;
	}
	if((*p1^*p2))
	{
		if(*p1>*p2) return 1;
		if(*p1<*p2) return -1;
	}else return 0;
	
	
}
int main()
{
	char *p1="xwd yyds";
	char *p2="axwd yyds";
	int ret = mystrcmp(p1,p2);
	printf("ret = %d\n",ret);
	return 0;
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值