C語言基礎 指標型函式引數

2021-08-21 18:05:15 字數 1360 閱讀 5765

在c語言中,函式的引數不僅可以是整數、小數、字元等具體的基本資料型別,還可以是指向它們的指標。用指標變數作函式引數可以將函式外部變數的位址傳遞到函式內部,使得在函式內部可以操作函式外部的資料,並且這些修改的資料不會隨著函式的呼叫結束而被銷毀。

而像陣列、字串、動態分配的記憶體等都是一系列資料的集合,沒有辦法通過某乙個引數全部傳入函式內部,只能傳遞它們的指標,在函式內部通過指標來影響這些資料集合。

封裝交換變數值得函式,然後呼叫,**如下:

#includevoid exchange(int a, int b) 

void main()列印結果:a=2,b=3

可以發現,變數a,b的值並沒有改變。那是因為呼叫exchange函式的時候傳入了變數a和b的值,該函式在自己的內部重新分配了2個位址空間來存放著兩個值,而該函式改變的是自己內部分配的空間的值。並不對外部的變數a,b造成影響。修改**如下:

#includevoid exchange(int *a, int *b) 

void main()

列印結果:

a=0x3bfc54,b=0x3bfc48

a=0x3bfc54,b=0x3bfc48

a=0x3bfc54,b=0x3bfc48

a=0x3bfc54,b=0x3bfc48

a=3,b=2

可以發現完成了交換的功能,並且在交換的過程中變數a,b的位址值始終沒有變化。

陣列是一系列資料的集合,並且定義陣列時的變數實際上存放有陣列的第乙個元素的位址,所以這個變數本質上就是乙個指標。

指標是不可能包含所有陣列的資訊的,所以c語言是無法通過引數將陣列所有的資料一次性傳遞到函式內部,如果希望在函式內部運算元組,必須傳遞陣列指標。

並且,呼叫函式中無法得知傳入陣列的長度,只能由外部傳入陣列的長度。

編寫乙個排序並且遍歷陣列的函式然後呼叫,示例**如下:

#includevoid order(int *arr,int len)}}

for(x=0;x思考:既然出入的是陣列的指標,那麼我肯定可以通過該指標來修改陣列內部的資料。這樣的話,我不讓別人修改我傳給他的陣列的資料,**該怎麼寫呢?

解決辦法1:

#includeconst int arr = ;

void modify(int *arr,int len) ;

modify(arr,(sizeof(arr)/sizeof(int)));

}

又能修改了這是為什麼呢?初步認為這是const關鍵字作用在區域性變數時是無效的?內部的原因暫時不清楚。

用的visual studio2017。最後發現是編譯器的問題。尷尬,用dev c++的時候連編譯都通過不了。

C語言中的指標型函式值

c語言中的指標型函式值 本文節選自 21天學通c語言 一書 資料型別 函式名 形參列表 其中,資料型別和指標操作符組成指標型別。例如 int max int a,int b,int c 此max函式中的return語句必須返回乙個變數的位址或乙個指標變數的值。範例14 6演示了如何使用指標變數作為函...

C語言學習歷程(十)「函式指標」與「指標型函式」

1.函式指標 定義 將函式首位址 入口位址 賦予乙個指標變數,使指標指向函式,則通過指標可找到並呼叫此函式,就是 函式指標變數 例如 int p 3.用乙個程式來舉例這兩種情況 include int test int i int main int test int i 此函式中定義了乙個指標型函式...

C語言基礎 函式指標 指標函式

參考這位大佬的文章,加上自己的理解 定義 指標函式,就是乙個返回值是指標的函式,其本質是乙個函式,而該函式的返回值是乙個指標。宣告格式為 型別識別符號 函式名 參數列 例如 int fun int x,int y 它的返回值是乙個int型別的指標 指標函式也沒什麼特別的,和普通函式對比不過就是其返回...