上一篇已经讲过一维整型数组与指针,所以本篇主要讲其余数组与指针的结合应用。
一.二维整形数组+指针
主要写法:
char s[10] = "hello"; //字符串 --- 存放在栈空间
// 堆区 也可以放
// 全局
// 字符串常量区
char *p = "hello"; //字符串常量 --没有数组名的数组
char *p = s;
eg:
strlen
int Strlen(const char *s)
{
int i=0;
while(*s != '\0')
{
i++;
s++;
}
return i;
}
strcpy
char * Strcpy(char *s1,const char *s2)
{
char *ret=s1;
while(*s2 != '\0')
{
*s1=*s2;
s1++;
s2++;
}
s1='\0';
return ret;
}
strncpy
char *Strncpy(char *s1, const char *s2,int n)
{
char *ret=s1;
while(n && *s2!='\0')
{
*s1=*s2;
s1++;
s2++;
--n;
while(n!=0)
{
*s1=0;
s1++;
--n;
}
}
return ret;
}
strcat
char *Strcat(char *dest,const char *src)
{
char *ret=dest;
while(*dest != '\0')
dest++;
while(*dest++=*src++);
return ret;
}
strncat
char *Strncat(char *dest,const char *src,int n)
{
char *ret=dest;
while(*dest != '\0')
dest++;
while(n && (*dest=*src));
{
dest++;
src++;
n--;
}
*dest='\0';
return ret;
}
strcmp
int Strcmp(const char *s1,const char *s2)
{
int t;
while(*s1!='\0' && *s1==*s2)
{
s1++;
s2++;
}
t=*s1-*s2;
return t;
}
strncmp
int Strncmp(const char *s1,const char *s2,int n)
{
int t;
while(n-1 && *s1!='\0' && *s1==*s2)
{
s1++;
s2++;
n--;
}
t=*s1-*s2;
return t;
}
二.一维字符型数组+指针
int (*p) [4]; //表示定义了一个指针 指向int[4]这种类型
//指向的目标是个数组类型 --- 数组指针
*(p+1) //代表 第 1 行的首元素的地址
*(p+1) + 1 // 第1行 第1列 元素的地址
*(*(p+1) + 1) // 第1行 第1列 的 元素
eg:
实现一个函数 找出数组中最大值
int Findmax(int(*p)[4],int row)
{
int i=0;
int j=0;
int max=*(*(p));
for(i=0;i<row;++i)
{
for(j=0;j<4;++j)
{
if(*(*(p+i) +j)>max)
max=*(*(p+i) +j);
}
}
return max;
}
三.二维字符型数组+指针
指针 + 字符二维数组
char s[3][10] = {"hello","world","china"};
char (*p)[10] = s;
eg:
实现一个输入函数,可以从键盘输入字符串
char* Findmax(char (*p)[10],int row)
{
char max[10];
int i=0;
for(i=0; i<row; ++i)
{
if(strcmp(*(p+i),max)>0)
strcpy(max,*(p+i));
}
return *max;
}