真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語言所有函數(shù)指針變量,c語言所有函數(shù)指針變量怎么求

C語言中關于指針變量與函數(shù)的用法。

#includestdio.h

站在用戶的角度思考問題,與客戶深入溝通,找到清澗網(wǎng)站設計與清澗網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設計、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)絡空間、企業(yè)郵箱。業(yè)務覆蓋清澗地區(qū)。

1.申明數(shù)組

a[5],下標是應該從0~4的;

2.進行排序時需要用2個變量進行冒泡排序;

3.scanf時%d后面不需要空格。

程序修改如下:

void

pa(int

*a,int

n)

{

int

i,j;

int

t;

for(i=0;in;i++)

for(j=0;jn-i-1;j++)

if(*(a+j)*(a+j+1))

{

t=*(a+j);

*(a+j)=*(a+j+1);

*(a+j+1)

=

t;

}

}

void

main()

{

int

a[5],i;

for(i=0;i5;i++)

scanf("%d",a[i]);

printf("未排序前的數(shù)列為:\n");

for(i=0;i5;i++)

printf("%d

",a[i]);

pa(a,5);

printf("排序后的數(shù)列為:\n");

for(i=0;i5;i++)

printf("%d

",a[i]);

}

C語言指針基本概念及其指針變量的定義是什么

指針是常見間接訪問方式.指針就像一個快捷方式,它指向內存的一個地址,可以通過指針就可以間接的訪問到數(shù)據(jù)。對于計算機,訪問內存的方式有兩種,直接訪問和間接訪問。直接訪問通過就是通過變量名稱去訪問。指針概念是構成C/C++的重要元素之一,是變量的一種類型,存放的是指定類型數(shù)據(jù)的地址,而同類型變量存放的是數(shù)據(jù)。

指針變量:就是一個變量,其值是可變的,與整形變量、浮點變量等等的命名規(guī)則完全相同。 “指針”是概念,“指針變量”是具體實現(xiàn)。指針類型說明,即定義變量為一個指針變量; 指針變量名; 變量值(指針)所指向的變量的數(shù)據(jù)類型。

擴展資料:

與其他高級編程語言相比,C 語言可以更高效地對計算機硬件進行操作,而計算機硬件的操作指令,在很大程度上依賴于地址。指針提供了對地址操作的一種方法,因此,使用指針可使得 C 語言能夠更高效地實現(xiàn)對計算機底層硬件的操作。另外,通過指針可以更便捷地操作數(shù)組。在一定意義上可以說,指針是 C 語言的精髓。

C語言中函數(shù)指針用法

函數(shù)在內存中有一個物理位置,而這個位置是可以賦給一個指針的。一零點函數(shù)的地址就是該函數(shù)的入口點。因此,函數(shù)指針可被用來調用一個函數(shù)。函數(shù)的地址是用不帶任何括號或參數(shù)的函數(shù)名來得到的。(這很類似于數(shù)組地址的得到方法,即,在只有數(shù)組名而無下標是就得到數(shù)組地址。)

怎樣說明一個函數(shù)指針變量呢 ?

為了說明一個變量 fn_pointer 的類型是"返回值為 int 的函數(shù)指針", 你可以使用下面的說明語句:

int (*fn_pointer) ();

為了讓編譯器能正確地解釋這句語句, *fn_pointer 必須用括號圍起來。若漏了這對括號, 則:

int *fn_pointer ();

的意思完全不同了。fn_pointer 將是一個函數(shù)名, 其返回值為 int 類型的指針。

2:函數(shù)指針變量

在C語言中規(guī)定,一個函數(shù)總是占用一段連續(xù)的內存區(qū), 而函數(shù)名就是該函數(shù)所占內存區(qū)的首地址。 我們可以把函數(shù)的這個首地址 ( 或稱入口地址 ) 賦予一個指針變量, 使該指針變量指向該函數(shù)。然后通過指針變量就可以找到并調用這個函數(shù)。我們把這種指向函數(shù)的指針變量稱為 " 函數(shù)指針變量 " 。

函數(shù)指針變量定義的一般形式為:

類型說明符 (* 指針變量名 )();

其中 " 類型說明符 " 表示被指函數(shù)的返回值的類型。 "(* 指針變量名 )" 表示 "*" 后面的變量是定義的指針變量。 最后的空括號表示指針變量所指的是一個函數(shù)。

例如: int (*pf)();

表示 pf 是一個指向函數(shù)入口的指針變量,該函數(shù)的返回值 ( 函數(shù)值 ) 是整型。

下面通過例子來說明用指針形式實現(xiàn)對函數(shù)調用的方法。

int max(int a,int b)

{

if(ab)return a;

else return b;

}

main()

{

int max(int a,int b);

int(*pmax)();

int x,y,z;

pmax=max;

printf("input two numbers:/n");

scanf("%d%d",x,y);

z=(*pmax)(x,y);

printf("maxmum=%d",z);

}

從上述程序可以看出用,函數(shù)指針變量形式調用函數(shù)的步驟如下:

1. 先定義函數(shù)指針變量,如后一程序中第 9 行 int (*pmax)(); 定義 pmax 為函數(shù)指針變量。

2. 把被調函數(shù)的入口地址 ( 函數(shù)名 ) 賦予該函數(shù)指針變量,如程序中第 11 行 pmax=max;

3. 用函數(shù)指針變量形式調用函數(shù),如程序第 14 行 z=(*pmax)(x,y); 調用函數(shù)的一般形式為: (* 指針變量名 ) ( 實參表 ) 使用函數(shù)指針變量還應注意以下兩點:

a. 函數(shù)指針變量不能進行算術運算,這是與數(shù)組指針變量不同的。數(shù)組指針變量加減一個整數(shù)可使指針移動指向后面或前面的數(shù)組元素,而函數(shù)指針的移動是毫無意義的。

b. 函數(shù)調用中 "(* 指針變量名 )" 的兩邊的括號不可少,其中的 * 不應該理解為求值運算,在此處它只是一種表示符號。

3:指針型函數(shù)

前面我們介紹過,所謂函數(shù)類型是指函數(shù)返回值的類型。 在C語言中允許一個函數(shù)的返回值是一個指針 ( 即地址 ) ,這種返回指針值的函數(shù)稱為指針型函數(shù)。

定義指針型函數(shù)的一般形式為:

類型說明符 * 函數(shù)名 ( 形參表 )

{

…… /* 函數(shù)體 */

}

其中函數(shù)名之前加了 "*" 號表明這是一個指針型函數(shù),即返回值是一個指針。類型說明符表示了返回的指針值所指向的數(shù)據(jù)類型。

如:

int *ap(int x,int y)

{

…… /* 函數(shù)體 */

}

表示 ap 是一個返回指針值的指針型函數(shù), 它返回的指針指向一個整型變量。下例中定義了一個指針型函數(shù) day_name ,它的返回值指向一個字符串。該函數(shù)中定義了一個靜態(tài)指針數(shù)組 name 。 name 數(shù)組初始化賦值為八個字符串,分別表示各個星期名及出錯提示。形參 n 表示與星期名所對應的整數(shù)。在主函數(shù)中, 把輸入的整數(shù) i 作為實參, 在 printf 語句中調用 day_name 函數(shù)并把 i 值傳送給形參 n 。 day_name 函數(shù)中的 return 語句包含一個條件表達式, n 值若大于 7 或小于 1 則把 name[0] 指針返回主函數(shù)輸出出錯提示字符串 "Illegal day" 。否則返回主函數(shù)輸出對應的星期名。主函數(shù)中的第 7 行是個條件語句,其語義是,如輸入為負數(shù) (i0) 則中止程序運行退出程序。 exit 是一個庫函數(shù), exit(1) 表示發(fā)生錯誤后退出程序, exit(0) 表示正常退出。

應該特別注意的是函數(shù)指針變量和指針型函數(shù)這兩者在寫法和意義上的區(qū)別。如 int(*p)() 和 int *p() 是兩個完全不同的量。 int(*p)() 是一個變量說明,說明 p 是一個指向函數(shù)入口的指針變量,該函數(shù)的返回值是整型量, (*p) 的兩邊的括號不能少。

int *p() 則不是變量說明而是函數(shù)說明,說明 p 是一個指針型函數(shù),其返回值是一個指向整型量的指針,*p 兩邊沒有括號。作為函數(shù)說明, 在括號內最好寫入形式參數(shù),這樣便于與變量說明區(qū)別。 對于指針型函數(shù)定義,int *p() 只是函數(shù)頭部分,一般還應該有函數(shù)體部分。

main()

{

int i;

char *day_name(int n);

printf("input Day No:/n");

scanf("%d",i);

if(i0) exit(1);

printf("Day No:%2d--%s/n",i,day_name(i));

}

char *day_n

ame(int n)

{

static char *name[]={ "Illegal day",

"Monday",

"Tuesday",

"Wednesday",

"Thursday",

"Friday",

"Saturday",

"Sunday"};

return((n1||n7) ? name[0] : name[n]);

}

本程序是通過指針函數(shù),輸入一個 1 ~ 7 之間的整數(shù), 輸出對應的星期名。指針數(shù)組的說明與使用一個數(shù)組的元素值為指針則是指針數(shù)組。指針數(shù)組是一組有序的指針的集合。指針數(shù)組的所有元素都必須是具有相同存儲類型和指向相同數(shù)據(jù)類型的指針變量。

指針數(shù)組說明的一般形式為: 類型說明符 * 數(shù)組名 [ 數(shù)組長度 ]

其中類型說明符為指針值所指向的變量的類型。例如: int *pa[3] 表示 pa 是一個指針數(shù)組,它有三個數(shù)組元素, 每個元素值都是一個指針,指向整型變量。通??捎靡粋€指針數(shù)組來指向一個二維數(shù)組。 指針數(shù)組中的每個元素被賦予二維數(shù)組每一行的首地址,因此也可理解為指向一個一維數(shù)組。圖 6—6 表示了這種關系。

int a[3][3]={1,2,3,4,5,6,7,8,9};

int *pa[3]={a[0],a[1],a[2]};

int *p=a[0];

main()

{

int i;

for(i=0;i3;i++)

printf("%d,%d,%d/n",a[i][2-i],*a[i],*(*(a+i)+i));

for(i=0;i3;i++)

printf("%d,%d,%d/n",*pa[i],p[i],*(p+i));

}

本例程序中, pa 是一個指針數(shù)組,三個元素分別指向二維數(shù)組 a 的各行。然后用循環(huán)語句輸出指定的數(shù)組元素。其中 *a[i] 表示 i 行 0 列元素值; *(*(a+i)+i) 表示 i 行 i 列的元素值; *pa[i] 表示 i 行 0 列元素值;由于 p 與 a[0] 相同,故 p[i] 表示 0 行 i 列的值; *(p+i) 表示 0 行 i 列的值。讀者可仔細領會元素值的各種不同的表示方法。 應該注意指針數(shù)組和二維數(shù)組指針變量的區(qū)別。 這兩者雖然都可用來表示二維數(shù)組,但是其表示方法和意義是不同的

C語言函數(shù)指針,敲黑白,講重點,如何定義函數(shù)指針?

學習了數(shù)組之后,我們知道數(shù)組是在內存中申請一塊內存空間;數(shù)組名代表內存塊的首地址,通過數(shù)組名可以訪問內存塊中的數(shù)據(jù)。

那么,對于函數(shù),它也是存放在內存塊中的一段數(shù)據(jù)。例如下面的函數(shù):

void func( int a )

{

printf( "in func, a = %d " , a );

}

此時,定義了一個函數(shù)名是func的函數(shù)??梢匀缦抡{用該函數(shù):

func(100);

此時,就進入了func函數(shù)的函數(shù)體中執(zhí)行??梢钥吹?, 函數(shù)名如同數(shù)組名一樣,代表函數(shù)所在內存塊的首地址 。通過數(shù)組名可以訪問數(shù)組在內存塊中申請的內存,同理,通過函數(shù)名,可以訪問函數(shù)在內存中存放的數(shù)據(jù)。

所以,函數(shù)名就代表了該函數(shù)在內存塊中存放的首地址。那么,函數(shù)名是表示一個地址,就可以把這個地址值存放在某一個指針變量中,然后,通過指針變量訪問函數(shù)名指向的函數(shù)。

在C語言中,提供了函數(shù)指針變量,可以存放函數(shù)名表示的地址。函數(shù)指針變量的定義格式如下:

返回數(shù)據(jù)類型 (*函數(shù)指針變量名)(形參列表)

對比函數(shù)的定義如下:

返回數(shù)據(jù)類型 函數(shù)名(形參列表)

可以看到,函數(shù)指針變量的定義,與函數(shù)的定義格式基本一樣,唯一的區(qū)別是把“函數(shù)名”轉換為“*(函數(shù)指針變量名)”;總結如下:

(1) 使用指針降級運算符*來定義,表示這個是一個指針。

(2) 指針降級運算符*不可以靠近返回數(shù)據(jù)類型,例如“返回數(shù)據(jù)類*”就表示函數(shù)的返回類型是一個指針。那么,為了讓指針降級運算符*能夠修飾函數(shù)指針變量,就用小括號()把指針降級運算符*與函數(shù)指針變量名包含起來。

定義了函數(shù)指針變量之后,可以把函數(shù)名賦給函數(shù)指針變量。因為,函數(shù)名就表示函數(shù)在內存塊中的首地址,所以,可以直接把一個地址賦值給函數(shù)指針變量。格式如下:

函數(shù)指針變量 = 函數(shù)名;

最終,可以通過函數(shù)指針變量調用函數(shù),調用的格式與通過函數(shù)名調用完全一樣,通過函數(shù)指針變量調用函數(shù),有如下形式:

方法1:函數(shù)指針變量(實參列表);

方法2:(*函數(shù)指針變量名)(實參列表);

很多情況下,我們更傾向于使用第一種形式,因為,它的使用方式更接近于通過函數(shù)名調用函數(shù)。

下面根據(jù)程序測試例子來看看怎么樣應用函數(shù)指針變量。

深入學習,可以交個朋友,工人人人號:韋凱峰linux編程學堂

程序運行結果如下:

深入學習,可以交個朋友,工人人人號:韋凱峰linux編程學堂

可以看到,我們定義了func函數(shù)和函數(shù)指針變量pfunc,然后,把函數(shù)名func設置給函數(shù)指針變量pfunc,最終,通過函數(shù)指針變量pfunc調用函數(shù)。

因為函數(shù)指針變量存放的就是函數(shù)名表示的地址,所以,函數(shù)指針變量與函數(shù)名一樣,可以直接通過函數(shù)指針變量調用函數(shù)。

注意:我們在學習指針的時候,可以把一個int類型的變量地址賦值給int類型的指針;但是,不可以把int類型變量的地址,賦值給double類型的指針。這就是變量數(shù)據(jù)類型不一致的問題。

同樣的道理,定義函數(shù)的時候,函數(shù)的返回數(shù)據(jù)類型和形參列表都不一樣,所以,函數(shù)指針變量能夠接收的函數(shù)名,它們定義的 函數(shù)返回數(shù)據(jù)類型和形參列表必須一致 ,此時,就如同變量與指針變量類型一致時,才可以把變量的地址賦值給指針變量一樣。

如下是一個測試例子:

深入學習,可以交個朋友,工人人人號:韋凱峰linux編程學堂

程序編譯結果如下:

深入學習,可以交個朋友,工人人人號:韋凱峰linux編程學堂

可以看到,我們把func函數(shù)的形參列表修改為double,但是,函數(shù)指針變量pfunc定義的形參列表為int類型,此時,函數(shù)和函數(shù)指針變量的定義格式不一致,所以,不可以把函數(shù)名表示的地址設置給函數(shù)指針變量。我們來總結一下:

(1) 在Ubuntu系統(tǒng)中,使用GCC編譯,提示warning警告,但是,程序可以編譯通過,可以運行。

(2) 在Windows系統(tǒng)中,使用Visual Studio工具,無法編譯該代碼,提示類型不一致。

(3) 從代碼的嚴謹方面來說,是不可以設置類型不一致的數(shù)據(jù)。所以,我們應該編寫嚴謹?shù)拇a,函數(shù)定義的類型,與函數(shù)指針類型不一致的時候,不可以把函數(shù)名,賦值給函數(shù)指針變量。

函數(shù)指針變量的定義很重要,我們需要牢記和理解它們使用的方式。下面多舉幾個例子說明函數(shù)指針變量的定義和使用。

int func( void );

int (*pfunc)( void );

pfunc = func;

此時,定義func函數(shù),它的返回值類型是int類型,形參列表是void,那么,定義pfunc函數(shù)指針變量的時候,它的返回值類型與形參列表都必須與func一樣。

char * func1( int x, int y, int x);

char * (*pfunc1)( int , int , int );

pfunc1 = func1;

char * (*pfunc1)( int x, int y, int x);

我們再總結一下:

(1) 函數(shù)名表示函數(shù)在內存塊中的首地址,可以直接把函數(shù)名賦值給函數(shù)指針變量;

(2) 定義函數(shù)指針變量的時候,函數(shù)返回數(shù)據(jù)類型和形參列表必須與要指向函數(shù)的定義一致;


當前名稱:c語言所有函數(shù)指針變量,c語言所有函數(shù)指針變量怎么求
網(wǎng)頁URL:http://weahome.cn/article/hdgcdp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部