扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
有函数: int fun(int a,int b);
创新互联公司成立与2013年,先为沙依巴克等服务建站,沙依巴克等地企业,进行企业商务咨询服务。为沙依巴克企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
要定义指向该函数的指针
对比指向 int a; 的指针
int *p; p = a;
p的定义是怎么来的?
首先要保证p是一个指针类型
写下(*p),
然后,考虑下p的基类型,
p的基类型就是变量a的类型int
将int 放在(*p)前面就行了
int (*p);
括号可以省略,就成了 int *p;
同理
想要实现 pf = fun;
(*pf) 将pf定义为一个指针,
将fun的类型作为pf的基类型
fun相当于一个 int (int a,int b)类型的量
int (int a,int b) (*pf);
基类型中有圆括号和中括号要后移
int (*pf)(int a,int b) ;//括号不能省略
pf = fun;
调用时
(*pf)(3,4); pf(3,4)都可以
#includestdio.h
int main()
{
int a,b,c,s[3],t;
int *x,*y,*z;//定义指针变量
x=a;//将a的地址赋给指针x,下同
y=b;
z=c;
scanf("%d%d%d",x,y,z);
s[0]=*x;//将指针x所指向的变量值赋给数组s的第一个元素;依次类推
s[1]=*y;
s[2]=*z;
for(int i=0;i3;i++)//冒泡排序
for(int j=0;j3-i-1;j++)
if(s[j]s[j+1])
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
for(int i=0;i3;i++)
printf("%d ",s[i]);
return 0;
}
——————————————————————————
#includestdio.h
void input(int *a)
{
int *p=a;//将数组a的首地址赋给指针p
for(int i=0;i10;i++)
scanf("%d",p[i]);//指针下标法输入
}
int max_min(int *a)
{
int *p=a;//将数组a的首地址赋给指针p
int max,min,x=0,y=0,t;
max=min=p[0];
for(int i=0;i10;i++)
{
if(p[i]=max)
{
max=p[i];
x=i;
}
if(p[i]=min)
{
min=p[i];
y=i;
}
}
t=p[y];
p[y]=p[0];
p[0]=t;
t=p[9];
p[9]=p[x];
p[x]=t;
}
void output(int *a)
{
int *p=a;//将数组a的首地址赋给指针p
for(int i=0;i10;i++)
printf("%d ",p[i]);//指针下标法输出
}
int main()
{
int a[11];
input(a);//调用函数,下同
max_min(a);
output(a);
return 0;
}
1、使用场景
使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:
#includestdio.h
#include stdlib.h
int main(int argc, char const *argv[])
{
int a[5]={0,1,2,3,4};
int *b,*d;
int c=2;
int *e=a; //e指向a数组首地址
//*b=2; 无法直接初始化
//printf("%d\n", *b);
e=e+2; //移动两个地址单元
d=c; //d指向c的地址来表示值
c=4; //修改原c变量的值,d指针的值会发生改变
b=(int *)malloc(sizeof(int));//为b分配一个int型空间来直接存储值
*b=2;//分配空间后可以直接赋值了
printf("this is e,b,c,d :%d %d %d %d\n",*e,*b,c,*d);
2、类型说明
(1)int *a :表示一个指向int型变量的指针,指向的是变量的地址单元
(2)char *b:表示一个指向char变量的指针
*a表示的是这个指针指向地址的值,a为此指针本身的地址,这点要明确,一般用*(a+1)、*(a+2)来表示值,如:
int nums[5]={0,1,2,3,4};
int *a=nums;
printf("%d %d %p\n",*a,*(a+1),a);
扩展资料:
指针的运算
指针指向变量地址,若原变量的内容发生了变化,它本身也会发生变化,指针之间的运算一般为值运算和地址运算
(1)值运算:直接通过*运算方式,像a+*(a+1),结果为第一个元素与第二个元素相加。
int nums[5]={0,1,2,3,4};
int *a=nums;
(2)地址运算:通过a+i的方式.指针会指向a的下i个地址。
int nums[5]={0,1,2,3,4};
int *a=nums;
a=a+2;
printf("%d\n",*a);
结果输出2。
参考资料来源 :指针-百度百科
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流