您好,登錄后才能下訂單哦!
指針函數:(返回指針值的函數)
當一個函數聲明其返回值為一個指針時,實際上就是返回一個地址給調用函數,以用
于需要指針或地址的表達式中。
簡單的說:
函數可以返回 整型 字符行 也可以返回指針型的數據(也就是地址)
格式:類型說明符 * 函數名(參數)
int *fun(int a,int b)
例:
node *creatnode(int data)
{
node *temp=malloc(sizeof(node));
temp->data=data;
temp->left=NULL;
temp->right=NULL;
return temp;
}
函數指針:(指向函數的指針)
指向函數的指針 包含了函數的首地址,可以通過指針變量來調用函數。
簡單的說:
定義一個指向函數的指針變量,用來存放某一函數的首地址,此指針變量指向該函數
調用一個函數,可通過函數名直接調用,也可以通過指向函數的指針變量來調用該函數
聲明格式如下:
類型說明符 (*函數名)(參數) 其實這里不能稱為函數名,應該叫做指針的變量名。
int (*fun)(int a,int b)
例:
int mymax(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
int x,y;
int max;
int (*p)(int,int);//函數指針 ==> 指向函數的指針變量
p = mymax;//mymax 為函數的首地址,p 指向 mymax
scanf("%d %d",&x,&y);
max = (*p)(x,y);//(*p) ==> mymax 通過p 指針來操作mymax()
printf("max = %d\n",max);
return 0;
}
函數指針的三種形式:
1.聲明一個函數類型
typedef void(Myfun)(int a,int b);
//將函數類型命名為Myfun返回值為void
使用:
Myfun* mfp = NULL;//定義函數指針變量
2.聲明一個函數指針類型
typedef void(*Myfun1)(int a,int b);
//聲明了一個Myfun的函數指針 數據類型
使用:
Myfun mfp = NULL;//mfp 指向NULL
3.定義一個函數指針 變量
void (*Myfun2)(int a,int b);
使用:
Myfun2 = NULL;//Myfun2 指向NULL 直接對變量初始化
指針函數與函數指針的區別
指針函數是一個函數,返回值是指針(不能返回局部非靜態變量的地址或局部指針非靜態變量,函數一旦執行完就釋放了)
函數指針是一個指針。指向一個函數
數組
數組的基本用法
int a[10];//a代表數組首元素的地址,&a代表整個數組的地址
//步長:a+1 = 4 &a+1 = 40
自定義數組類型
typedef int (typeArray)[10];
typeArray array;//用自定義類型定義數組變量
array[0] = 10;//給數組元素賦值
printf("array[0] = %d\n",array[0]);//打印數組元素的值
數組還原成指針
a[i] = *(a+i)
a[i][j] = *(*(a+i)+j)
指針數組
一個數組,其中的若干個元素均為指針類型的數據
int * array[4];
例:
char *Myarray[] = {"1111", "33333", "aaaa"}; //指針 數組
數組指針
這個指針指向數組的首地址
int (*array)[4];
例:
int (*array)[4];//定義一個指向數組的指針 array
int a[4];
array = &a;
指針數組與數組指針的區別:
數組指針是指向數組首元素的地址的指針,其本質為指針
(這個指針存放的是數組首地址的地址,相當于2級指針,這個指針不可移動);
指針數組是數組元素為指針的數組,其本質為數組。
舉例
數組指針:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include<stdio.h> int main() { char c[][3] = {"哥", "哥", "我", "岸", "上", "走"}; char (*p)[3]; int i; p=c; //將指針定位于c[0] for(i=0;i<=5;i++) { printf("%s, ", *(p+i)); //或者將*(p+i)替換成*p++ } printf("\n"); for(i=5;i>=0;i--) { printf("%s,",*(p+i)); //或者將*(p+i)替換成*p-- } return 0; } |
指針數組:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include<stdio.h> int main() { int i; char *pch[6] = {"妹","妹","你","坐","船","頭"}; for(i=0;i<6;i++){ printf("%s, ",pch[i]); } printf("\n"); for(i=5; i>=0; i--){ printf("%s\n",pch[i]); } return 0; } |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。