指针--二维数组
#include<stdio.h>
void Find(int (*a)[4],int row)
{
int i,j;
for(i=0;i<row;i++)
{
for(j = 0;j<4;j++)
{
if(*(*(a+i)+j) %3 == 0)
{
printf("%d\n",*(*(a+i)+j)); //找出数组中整除3的数
}
}
}
}
int main()
{
int a[4][4] = {1,2,5,7,8,9,3,4,6,10,16,12,11,13,15,14};
Find(a,4);
return 0;
}
指针---二维字符型数组
例:
char (*p)[10] = s; //p指向二维数组s
char[10] s1[3]; //二维数组 //此时的二维数组的元素 是一个一维字符型数组
//定义一个存放 字符串 的一维数组
char *p = "hello"; //p的类型 char *
//char *的指针变量p 相当于代表一个字符串
char* pstr[3]= {"hello","world","china"}; //数组 --- 数组中存放是 各个字符串的地址
//地址 ---存放这地址数据的数组 --- 指针的数组 ---指针数组
排序练习
void sort(char **p,int len)
{
int i = 0;
int j=0;
for(i = len-1;i>0;i--)
{
for( j=0;j<i;j++)
{
if(strcmp(*(p+j),*(p+j+1))>0)
{
char *o = *(p+j);
*(p+j) = *(p+j+1);
*(p+j+1) = o;
}
}
}
}
找最大值
char *Findmaxstr(char **p,int len)
{
int i = 0;
char *max = *p;
for(i = 0;i <len ;i++)
{
if(strcmp(max,*(p+i))<0)
{
max = *(p+i);
}
}
return max;
}
指针----函数
通过指针的方式来调用函数
函数名 --- 代表函数的入口地址
int add(int a,int b)——该函数的数据类型为 int (int , int)
而指针的形式为 基类型 * 变量名
所以用指针指向函数可写为 Int (*p) (int ,int),其主要应用为回调函数
说明
1.可以定义一个函数类型的指针变量,来保存函数的入口地址
2.有了这个指针变量,通过指针变量,来进行函数调用
例:
#include<stdio.h>
int pfunc1(int a,int b)
{
return a+b;
}
int pfunc2(int a,int b)
{
return a-b;
}
int pfunc3(int a,int b)
{
return a*b;
}
int pfunc4(int a,int b)
{
return a/b;
}
void processData(int a,int b,int (*pfunc)(int,int))
{
printf("%d\n",(*pfunc)(a,b));
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
processData(a,b,pfunc1);
return 0;
}