1.匿名数组:字符串:其值是首元素地址,是const char*
2.const:const int *p:说明不能通过p这个指针修改所指向的空间;
(1)Puts函数
void Puts(const char *s)
{
while(*s)
{
putchar(*s++);
}
putchar('\n');
}
2)strlen函数
int Strlen(const char *s)
{
int counter = 0;
while(*s)
{
++counter;
++s;
}
return counter;
}
(3)strcpy函数
char *Strcpy(char *dest,const char *scr)
{
char *ret = dest;
while(*scr)
{
*dest = *scr;
++dest;
++scr;
}
*dest = '\0';
return ret;
}
(4)strcat函数
char *Strcat(char *dest,const char *scr)
{
char *ret = dest;
while(*dest)
{
++dest;
}
while(*scr)
{
*dest++ = *scr++;
}
*dest = '\0';
return ret;
}
(5)strcmp函数
int Strcmp(const char *s1,const char *s2)
{
while(*s1 == *s2 && *s1 && *s2)
{
++s1;
++s2;
}
return *s1 - *s2;
}
(6)strncpy函数
*Strncpy(char *dest,const char *scr,int n)
{
char *ret = dest;
while(*scr && n != 0)
{
*dest++ = *scr++;
--n;
}
*dest = '\0';
return ret;
}
(7)strncat函数
char *Strncat(char *dest,const char *scr,int n)
{
char *ret = dest;
while(*dest)
{
++dest;
}
while(*scr && n != 0)
{
*dest++ = *scr++;
--n;
}
*dest = '\0';
return ret;
}
(8)strncmp函数
int Strncmp(const char *s1,const char *s2,int n)
{
while(*s1 == *s2 && *s1 && *s2 && --n)
{
++s1;
++s2;
}
return *s1 - *s2;
}
(9)在一个字符串中查找某个字符串首次出现的位置
int findInLong(const char *s,const char *sub)
{
int n = Strlen(s), m = Strlen(sub),i;
for(i =0 ;i < n - m ;++i)
{
if(Strncmp(s+i,sub,m) == 0)
{
break;
}
}
if(i<n)
{
return i;
}
else
{
return 0;
}
}
3.void *:万能指针,可以接受任何类型的地址,但是万能指针不能作为指针进行指针运算,常要与强转搭配使用,一般是写代码自己也不知道是什么类型,降低程序耦合性
short i =10;
void *p;
p = &i;
printf("%d\n",(short *)p);
(1)实现memcpy
4.指向数组的指针
(1)格式:基类型 (*指针名)【元素个数】;*是类型说明符;如果没有括号,则是指针数组;
(2)区分指针数组和数组指针
数组指针:int (*p) [10]:是指向长度为10的整型数组的指针,保存了一个地址,为该整型数组的首元素地址;
指针数组:int *p[10]:定义了10个指针数组变量;
5.二维数组指针
(1)二维数组名就是指向长度为cols长度的一维数组首数组指针,一维数组名相当于指向该一维数组的首元素的数组指针;
(2)二维数组找最大值
int maxOfArray2D(int (*a)[4],int rows)
{
int cols = sizeof(*a) / sizeof(**a);
int i,j;
int max = **a;
for(i = 0;i < rows ;++i)
{
for(j = 0;j <cols; ++j)
{
if(max < *(*(a + i) + j))
{
max = *(*(a + i ) + j);
}
}
}
return max;
}
3)二维数组求边缘和
int sumOfEdge2D(int (*a)[4],int rows)
{
int cols = sizeof(*a) / sizeof(**a);
int i,j,sum = 0;
for(i = 0 ; i < rows; ++i)
{
for(j = 0 ; j < cols ;++j)
{
if(0 == i || 0 == j || i == rows || j ==cols)
{
sum += *(*(a + i) + j);
}
}
}
return sum;
}