重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这样说吧:
创新互联建站从2013年开始,先为五峰等服务建站,五峰等地企业,进行企业商务咨询服务。为五峰企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
有2个箱子,编号分别是a,b,a装了一个苹果,b装了一个梨子,
有2张纸,编号分别是p,q,p纸上写着a,q纸上写着b。
1、现在我准备一张白纸,编号为t,把p纸上写的a抄到t上,然后擦掉p纸上的a,写成b;把q纸上的b摖掉,然后把t纸上写的a抄到q纸上,那苹果和梨子交换了吗?
2、现在我准备一个空箱子,编号为t,根据p纸上写的箱子编号a,把a箱子中的东西取出并放到箱子t,根据q纸上写的箱子编号b,把b箱子中的东西取出并放到p纸上写的箱子a中,然后把t箱子中的东西取出放到q纸上写的箱子b中,苹果和梨子交换了吗?
#include stdio.h
/*求a+b*/
int plus(int a, int b) { return a + b; }
/*求a-b*/
int minus(int a, int b) { return a - b; }
/*求a*b*/
int multiply(int a, int b) { return a * b; }
/*求a/b*/
int divide(int a, int b) { return a / b; }
typedef int (*FUN)(int,int); /*定义基本四则运算的标准形式*/
char op[]="+-*/"; /*四则运算的符号*/
FUN fun[]={plus, minus, multiply, divide};/*四则运算的函数指针*/
/*下面的程序演示了如何用一个通用的函数指针连续处理多种不同的函数运算*/
int main(void)
{
int a = 6, b = 3, i = 0;
for(i = 0; i 4; i++)
printf("%d %c %d = %d\n", a, op[i], b, (*(fun + i))(a,b));
return 0;
}
/*运行结果:
6 + 3 = 9
6 - 3 = 3
6 * 3 = 18
6 / 3 = 2
上面的程序说明,如果你有很多种类似的操作,形式上都一致,只不过内容有所不同,那么你可以用函数指针去代替这些函数,这样有时候会很方便
*/
在我的系统中运行你 的程序和你想的一样,是8不是7.
string 1,string 2:
it's a boy
boy
offset 8 "boy"in"it's a boy"
所谓指针就是地址,只是指针会区别它是什么指针,对应的数据占多大内存。如subst,str都是char*类型的,他们是字符指针,所以他们指向的类型是字符。*str和str[0]的含义是一样的,意思是取得首字符。在c语言中字符串就是用字符指针来表示的,对应的是“%s”,而加上了*,是取这个字符指针地址的内容,也就是一个字符,用“%c”表示。所以你打印的是字符串,就应该用%s。
函数指针 就是指向函数的指针
比如
void pr_int(int a)//函数
{
printf("%d\n",a);
}
void func(void (*p)(int), int m)//函数指针做参数
{
p(m);//调用函数指针
}
int main()
{
func(pr_int, 100);
return 0;
}
函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
函数指针有两个用途:调用函数和做函数的参数。
函数指针的声明方法为:
返回值类型 ( * 指针变量名) ([形参列表]);
如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
下面的程序说明了函数指针调用函数的方法:
#includestdio.h
int max(int x,int y){return (xy? x:y);}
int main()
{
int (*ptr)(int, int);
int a, b, c;
ptr = max;
scanf("%d%d", a, b);
c = (*ptr)(a,b);
printf("a=%d, b=%d, max=%d", a, b, c);
return 0;
}