指针的理解

指针:在计算机科学中,指针是编程语言中的对象,利用地址,他的值直接指向存在电脑存储器中另一个地方的值。

#include<stdio.h>
int main()
{
	int a = 10;
	int *p = &a;
	system("psuse");
	return 0;
}

指针的图示:

指针是一个变量,图中p指针指向变量a的地址。

指针是一个变量同样有各种各样的类型,比较常用的类型有:

char *p

int *p

short *p

long *p

float *p

double *p

指针和其余变量一样拥有各种各样的运算:指针可以+-整数表示指针所指向地址的移动

指针-指针表示两个指针间元素的个数

C语言标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针比较。

通过指针实现库函数:

int my_strcpy(char *dest, const char *arr)
{
	assert((char*)arr != NULL);
	assert((char*)dest != NULL);
	while (*dest++ = *arr++)
	{
		;
	}

}
int my_strcat(char *dest,const char *arr)
{
	assert(*arr != NULL);
	assert(*dest != NULL);
	while (*dest)
	{
		dest++;
	}
	while (*dest++ = *arr++)
	{
		;
	}
} 
int my_strstr(const char* str1,const char* str2)
{
	const char *s1 = str1;
	const char *s2 = str2;
	assert(*str1);
	assert(*str2);
	if (*s2 == '\0')
		return str1;
	while (*str1!='\0')
	{
		s1 = str1;
		s2 = str2;
		while (*s1!='\0 '&&*s2!='\0'&&(*s1==*s2))
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
			return str1;
		str1++;
	}
	return NULL;
}
char *my_strchr(const char* str, char *ch)
{
	while (*str != '\0')
	{
		if (*str==*ch)

		{
			return str;
		}
		str++;
	}
	return NULL;
}
int my_strcmp(const char* src, const char *dest)
{
	int ret = 0;
	assert(src != NULL);
	assert(dest != NULL);
	while ((*src==*dest)&&*dest&&*src)
	{
		src++;
		dest++;
	}
	ret = *src - *dest;
	if (ret < 0)
		ret = -1;
	if (ret > 0)
		ret = 1;
	else if(ret==0)
		ret = 0;
	return ret;
}
void* my_memcpy(void *dest, const void *src,size_t count)
{
	void *ret = dest;
	while (count--)
	{
		*(char *)dest = *(char *)src;
		dest = (char *)dest + 1;
		src = (char *)src + 1;
	} 
	return ret;
}
void* my_memmove(void *dest, const void *src, size_t count)
{
	void *ret = dest;
	if(dest<src)
	{
		while (count--)
		{
			*(char *)dest = *(char *)src;
			dest = (char *)dest + 1;
			src = (char *)src + 1;
		}
		return dest;
	}
	else
	{

		while(count--)
		{
			dest = (char *)dest + count;
			src = (char*)src + count;
			*(char*)dest = *(char*)src;
		}
		return dest;
	}

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值