指针:在计算机科学中,指针是编程语言中的对象,利用地址,他的值直接指向存在电脑存储器中另一个地方的值。
#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;
}
}