指针 操作 二维字符型数组
定义:
char s[ ][10] = {"hello","world","china"};
char (*p)[10] = s; //p指向二维数组s
练习:
输入三个字符串 ,排序输出
cs
#include <stdio.h>
#include <string.h>
void putStr(char (*p)[20],int row)
{
int i = 0;
for (i = 0; i < 3; ++i)
{
printf("%s \n",*(p+i));
}
}
void choiceSort(char (*p)[20],int row)
{
int i = 0;
int j = 0;
for (i = 0; i < row-1; ++i)
{
for (j = i+1; j < row; ++j)
{
if (strcmp(*(p+i),*(p+j)) > 0)
{
char t[20];
strcpy(t,*(p+i));
strcpy(*(p+i),*(p+j));
strcpy(*(p+j),t);
}
}
}
}
int main(void)
{
char s[][20] = {"hello","world","china"};
putStr(s,3);
choiceSort(s,3);
puts("------------------\n");
putStr(s,3);
return 0;
}
指针的数组
1.先看以下3个初始化
char *p1 = "hello";
char *p2 = "world";
char *p3 = "china";
p1,p2,p3分别指向字符串常量区中"hello","world","china"不能被修改,
我们可以将上面3个写在一起组成一个指针数组:
char* pstr[3]= {"hello","world","china"}; 数组中存放是 各个字符串的地址
2.函数中使用指针数组,形参形式为(char **p)
char **p:数组指针的指针,基类型是char*
3.练习:
逆序,冒泡排序
cs
#include <stdio.h>
#include <string.h>
void printStr(char * *p,int len)
{
int i = 0;
for (i = 0; i < 3; ++i)
{
printf("%s\n",*(p+i));
}
}
void reverseStr(char **begin, char **end)
{
while (begin < end)
{
char *t = *begin;
*begin = *end;
*end = t;
begin++;
end--;
}
}
void bubbleSort(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 *t = *(p+j);
*(p+j) = *(p+j+1); //值不能被改变,交换地址
*(p+j+1) = t ;
}
}
}
}
int main(void)
{
const char *p[] = {"hello","world","china"};
printStr(p,3);
reverseStr(p,p+2);
bubbleSort(p,3);
puts("---------------");
printStr(p,3);
return 0;
}
指针 + 函数
1.通过指针 的方式 来调用函数
函数名 --- 代表函数的入口地址
i nt add(int a,int b) // 函数
// 函数名 - 代表函数的入口地址
// 函数名对应的数据类型:int (int a,int b)
int (int a,int b) // 代表一类函数
// 返回值为int型
// 带有两个int型的形参变量
函数的指针应该写成 int(*p)(int,int) 这样的形式
函数的调用:p(a,b);
说明:
1.可以定义一个函数类型的指针变量
来保存函数的入口地址
2.有了这个指针变量
通过指针变量 进行函数调用
cs
#include <stdio.h>
int add(int a,int b)
{
return a + b;
}
int main(void)
{
int (*p) (int,int) = add; //理解:int(int,int) *p
int ret = p(1,2);
printf("ret = %d\n",ret);
}
2.函数回调
回调函数 --- 通过函数指针调用函数 就是回调
c语言中,使用了 函数指针 实现回调
练习:
写一个程序 实现加,减,乘,除
以回调函数的形式,打印对应的结果
cs
#include<stdio.h>
void proscessDate(int a,int b,int(pfunc)(int,int))
{
int n;
n=pfunc(a,b);
printf("%d\n",n);
}
int add(int a,int b)
{
return a+b;
}
int Chu(int a,int b)
{
return a/b;
}
int Jian(int a,int b)
{
return a-b;
}
int Cheng(int a,int b)
{
return a*b;
}
int main(void)
{
int a,b;
scanf("%d%d",&a,&b);
proscessDate(a,b,Cheng);
}