高级指针
2016-07-17 21:17
323 查看
指针的指针
--指针的指针即指针变量的地址
<span style="color:#000000;">int a=10,b=11;
int *p=&a;//定义了p指针,指向a变量的地址
int *q=&b;
int **m=&p;//定义了m指针,指向p变量的地址
int **n=&q;
printf("%d,%d,%d",a,*p,**m);</span>
eg.
<span style="color:#000000;">void func(int **p){
**p=20;
}
int main(int argc, const char * argv[]) {
int a=10,b=11;
int *p=&a,*q=&b;
int **m=&p,**n=&q;
func(&p);
printf("*p=%d,*q=%d\n",*p,*q);
printf("p=%p,q=%p\n",p,q);
printf("*m=%p,*n=%p",*m,*n);
printf("%d%d\n",**m,**n);
n=m;
printf("*p=%d,*q=%d\n",*p,*q);
printf("%d%d\n",**m,**n);
printf("----------------------------\n");
return 0;
}
<span style="font-family:'HiraginoSansGB';"><span style="font-family:'HiraginoSansGB';">输出结果:
*p=20,*q=11
p=0x7fff5fbff73c,q=0x7fff5fbff738
*m=0x7fff5fbff73c,*n=0x7fff5fbff7382011
*p=20,*q=11
2020</span></span>
</span>
函数指针
#include <stdio.h>
//函数指针
typedef double myint;//自定义类型
typedef double* MYPT;//自定义指针类型
typedef double (*pfunc) (double,double);//函数指针类型重定义
int getMax(int,int);
int getMax(int a,int b){
return a>b?a:b;
}
double add(double a,double b){
return a+b;
}
double sub(double a,double b){
return a-b;
}
double mult(double a,double b){
return a*b;
}
double mydiv(double a,double b){
return a/b;
}
//使用函数指针作为参数
int callFunc(pfunc func,int a,int b){
return func(a,b);
}
<font size="5"><font face="'HiraginoSansGB'"><span style="color:rgb(0.000000%, 17.647060%, 60.000000%);"><span style="font-family:'HiraginoSansGB';"><span style="color:#000000;">int main(int argc, const char * argv[]) {
//例1
//getMax函数入口地址
int (*p)(int,int)=getMax;//函数指针,指针指向自定义函数
int result=p(10,20);
printf("%d\n",result);
printf("---------------------------\n");
//例2
pfunc p1 = NULL;
printf("请输入四则表达式(10+3)\n");
myint n1,n2;
char op;
scanf("%lf%c%lf",&n1,&op,&n2);
switch (op) {
case '+':
p1=add;
break;
case '-':
p1=sub;
break;
case '*':
p1=mult;
break;
case '/':
p1=mydiv;
break;
}
double result1=callFunc(p1,n1,n2);
printf("1---%.2f\n",result1);
printf("---------------------------\n");
return 0;
}</span></span></span></font></font>
<span style="font-family:'HiraginoSansGB';">输出结果:
20
---------------------------
请输入四则表达式(10+3<span style="font-family:'HiraginoSansGB';">)</span>
9*3
1---27.00
</span>
--指针的指针即指针变量的地址
<span style="color:#000000;">int a=10,b=11;
int *p=&a;//定义了p指针,指向a变量的地址
int *q=&b;
int **m=&p;//定义了m指针,指向p变量的地址
int **n=&q;
printf("%d,%d,%d",a,*p,**m);</span>
eg.
<span style="color:#000000;">void func(int **p){
**p=20;
}
int main(int argc, const char * argv[]) {
int a=10,b=11;
int *p=&a,*q=&b;
int **m=&p,**n=&q;
func(&p);
printf("*p=%d,*q=%d\n",*p,*q);
printf("p=%p,q=%p\n",p,q);
printf("*m=%p,*n=%p",*m,*n);
printf("%d%d\n",**m,**n);
n=m;
printf("*p=%d,*q=%d\n",*p,*q);
printf("%d%d\n",**m,**n);
printf("----------------------------\n");
return 0;
}
<span style="font-family:'HiraginoSansGB';"><span style="font-family:'HiraginoSansGB';">输出结果:
*p=20,*q=11
p=0x7fff5fbff73c,q=0x7fff5fbff738
*m=0x7fff5fbff73c,*n=0x7fff5fbff7382011
*p=20,*q=11
2020</span></span>
</span>
函数指针
#include <stdio.h>
//函数指针
typedef double myint;//自定义类型
typedef double* MYPT;//自定义指针类型
typedef double (*pfunc) (double,double);//函数指针类型重定义
int getMax(int,int);
int getMax(int a,int b){
return a>b?a:b;
}
double add(double a,double b){
return a+b;
}
double sub(double a,double b){
return a-b;
}
double mult(double a,double b){
return a*b;
}
double mydiv(double a,double b){
return a/b;
}
//使用函数指针作为参数
int callFunc(pfunc func,int a,int b){
return func(a,b);
}
<font size="5"><font face="'HiraginoSansGB'"><span style="color:rgb(0.000000%, 17.647060%, 60.000000%);"><span style="font-family:'HiraginoSansGB';"><span style="color:#000000;">int main(int argc, const char * argv[]) {
//例1
//getMax函数入口地址
int (*p)(int,int)=getMax;//函数指针,指针指向自定义函数
int result=p(10,20);
printf("%d\n",result);
printf("---------------------------\n");
//例2
pfunc p1 = NULL;
printf("请输入四则表达式(10+3)\n");
myint n1,n2;
char op;
scanf("%lf%c%lf",&n1,&op,&n2);
switch (op) {
case '+':
p1=add;
break;
case '-':
p1=sub;
break;
case '*':
p1=mult;
break;
case '/':
p1=mydiv;
break;
}
double result1=callFunc(p1,n1,n2);
printf("1---%.2f\n",result1);
printf("---------------------------\n");
return 0;
}</span></span></span></font></font>
<span style="font-family:'HiraginoSansGB';">输出结果:
20
---------------------------
请输入四则表达式(10+3<span style="font-family:'HiraginoSansGB';">)</span>
9*3
1---27.00
</span>
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言判断一个数是否是2的幂次方或4的幂次方
- C语言二进制思想以及数据的存储
- C语言中计算正弦的相关函数总结