#include <stdio.h>
int Add(int x, int y)
{
return x + y;
}
int Sub(int x, int y)
{
return x - y;
}
int Mul(int x, int y)
{
return x * y;
}
int Div(int x, int y)
{
return x / y;
}
int jisuanqi(int x, int y, int (*p)(int x, int y))
{
return p(x,y);
}
int main(void)
{
int (*p)(int x, int y) = NULL;
int num1 = 0;
int num2 = 0;
char op = 0;
scanf("%d %c%d",&num1,&op,&num2);
switch(op)
{
case '+':p = Add;break;
case '-':p = Sub;break;
case '*':p = Mul;break;
case '/':p = Div;break;
}
printf("Ret = %d\n",jisuanqi(num1, num2, p)); //p指向某函数
return 0;
}
2.二级指针
2.1 定义
二级指针是指向一级指针变量的指针
cs复制代码
int **q;
定义一个指针变量q,占8个字节空间,指向ige指针变量空间,即指向一级指针变量的指针
int a[5] = {1,2,3,4,5};
int *p = NULL;
p = &a[0];
p = a;
a == &a[0];
a[n] == *(a+n) == *(p+n) == p[n]
2.二维数组和指针的关系
数组的数组名是指向数组第一行的数组指针
cs复制代码
int a[2][3] = {1,2,3,4,5,6};
int *p = NULL;
int (*q)[3] = NULL;
p = &a[0][0];
p = a[0];
p = *a;
q = a;
a:指向数组第一行元素的数组指针 int (*)[3]
a[0]:指向a[0][0]的指针 int *
a[1]:指向a[1][0]的指针 int *
访问数组第m行第n列元素的方式:
a[m][n]
*(a[m]+n)
*(*(a+m)+n)
*(p+m*N+n)
*(*(q+m)+n)
*(q[m]+n)
q[m][n]
作业
1.封装一个函数,将字符串"12345"转换成整形12345
2.封装函数实现mystrlen,mystrcpy,mystrcat,mystrcmp功能
3.从终端接收五个字符串,对他们排序后输出
cs复制代码
#include <stdio.h>
int ToNum(char *a)
{
int i = 0;
int num[32] = {0};
int sum = 0;
while(*a != '\0')
{
num[i] = *a - '0';
sum = sum * 10 + num[i];
i++;
a++;
}
return sum;
}
int main(void)
{
char a[32] = "12345";
printf("outnum = %d\n",ToNum(a));
return 0;
}