天天看點

指針在函數中的作用

指針在函數中的作用

  • ​​傳遞位址​​
  • ​​指向函數的指針​​
  • ​​從函數中傳回指針​​
  • ​​指針數組​​
  • ​​後續​​

傳遞位址

指針傳遞位址時,指針變量産生了副本,但副本與原變量所指的記憶體區域是同一個。對指針副本指向的變量進行改變,就是改變原指針變量所指向的變量。

指向函數的指針

指針變量也可以指向一個函數。一個函數在編譯時被配置設定給一個入口位址,這個函數入口位址被稱為函數的指針。可以用一個指針變量指向函數,然後通過該指針變量調用此函數。

一個函數可以帶回一個整型值、字元值、實型值等,也可以帶回指針型的資料,即位址。其概念與以前類似,隻是帶回的值的類型是指針類型而已。傳回指針的函數簡稱為指針函數。

定義指針函數的一般形式為:

類型名 *函數名(參數表列);

#include <iostream>
#include <windows.h>
#include <iomanip>
using namespace std;
int avg(int a,int b);
int main()
{
    int length,width,result;
    cin>>length;
    cin>>width;
    int (*pfun)(int ,int);//定義函數指針
    pfun=avg;
    result=(*pfun)(width,length);
    cout<<result<<endl;

    system("pause");
    return 0;
}
int avg(int a,int b)
{
    return (a+b)/2;
}      
指針在函數中的作用

指針pfun是指向avg函數的函數指針,調用pfun函數指針,就和調用函數avg一樣。

從函數中傳回指針

當我們定義一個傳回指針類型的函數時,形式如下:

int *fun(參數清單)
{
  ……;
  return p;
}      

p是一個指針變量,它可以是形式如&value的位址值。當函數傳回一個指針變量,我們得到的是位址值。值得注意的是,傳回指針的記憶體内容并不随傳回的位址一樣經過複制成為臨時變量。 如果操作不當,後果将難以預料。

指針數組

數組中的元素均為指針變量的數組稱為指針數組,一維指針數組的定義形式為:

類型名 *數組名 [數組長度];

類如:

int *p[4];      

指針數組中的數組名也是一個指針變量,該指針變量為指向指針的指針。類如:

int *p[4];
int a=1;
*p[0]=&a;      

p是一個指針數組,它的每一個元素是一個指針型資料(其值為位址),指針數組p的第一個值是變量a的位址。指針數組中的元素可以使用指向指針的指針來引用。類如​

​int *(*p);​

" * “運算符表示p是一個指針變量,*(*p) 表示指向指針的指針,” * "運算符的結合性是從右到左,是以語句“int *(*p);”可寫成“int **p;”。

後續

如果想了解更多物聯網、智能家居項目知識,可以關注公衆号。

繼續閱讀