在函数名前加上星号,也可以调用函数,一般用作回调函数使用。(第31行)
任何一个指针,变量名称本身:指向变量所在的地址;
在变量名称前加*:通过该地址去找地址里的内容;
函数指针与指针指向的数据访问
对指针类型的变量,gdb: p *指针变量:
如果该地址在栈,堆,数据段,则 会打印该变量的值
如果该地址在代码段,则会打印该变量所指的代码
定义一个函数指针,使用该函数指针(*函数指针)(要传给函数的变量)
指针指向代码段系统默认调用函数
* 指针->指针指向的地址的内容
1. int quadraate(int a);是一个函数 int (*pquadrate)(int a)=&quadrate;将指针pquadtate指向函数quadrate! int s=(*pquadrate)(a)可以调用quadtate函数,这种操作常用于回调函数
在gdb里面 你输入bt命令就会显示当前函数堆栈
假如你是从main函数调用了一个函数add(),在函数add()中又调用一个minus()的,你在进入minus函数输入bt,就会显示:
#0 minus()....
#1 ...add()...
#2 ...mian()... //..是省略了一些东西
此时你输入f0 就是进入 minus的堆栈; f1是进入add()的堆栈...
如果我答的没有错的话。。
3-1gdb工具的使用 课程有讲。
1. int quadraate(int a);是一个函数 int (*pquadrate)(int a)=&quadrate;则是指向这个函数的指针! int s=(*pquadrate)(a)可以调用函数! 2.一个指针变量*q 不加*号:P q 取出自己地址中存储的值(一个地址)。 加*号:P *q 取出指向地址中存储的值。
若“p”是一个地址,则“*p”是到这个地址去取里面的值,“(*p)”把表示为一个整体,“(*p)(数据)”若p为代码段,则调用这个函数,传参数"数据"进去。
若地址指向的是栈和堆,操作系统会把栈或者堆的具体数据取出来,若地址指向的不是一个栈或者堆,而是代码段的话,操作系统会认为是指向某一个函数
函数指针
int quadraate(int a);是一个函数
int (*pquadrate)(int a)=&quadrate;则是指向这个函数的指针!
int s=(*pquadrate)(a)可以调用函数!