有函數: 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。
參考資料來源 :指針-百度百科
名稱欄目:c語言函數指針技巧 c語言中的函數指針
本文路徑:http://m.newbst.com/article40/doipjeo.html
成都網站建設公司_創新互聯,為您提供網站營銷、響應式網站、電子商務、手機網站建設、網站制作、品牌網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯