程式設計 函式

2022-09-09 21:54:19 字數 1648 閱讀 9134

函式-引數的傳遞

實參--引數原樣。 s

形參--傳遞給函式的樣子。 x

值傳遞--c_r是實參的乙個拷貝,無法改變實參的值。

void change1(int x){}

指標傳遞--c_z 也是值傳遞,只是這個值是是乙個指向位址。操作的也是copy後的副本。指標有自己的位址,內容是呼叫時指向實參位址。

void change3(int *x){}

可以通過這個指向位址,來改變裡面的值。

但這個指向位址是改變不了的。

x的值為a--》指向c。複製了乙份x'。

可以通過a改變c的內容,但a是改變不了的。

但呼叫的時候可以用chang3(&x)..呼叫和宣告交叉起來,同乙個符號會有兩種不同的內涵,很容易迷糊。

c# out int x; 這裡有不一樣,x是會被清空,原來的值是傳不進來的。

引用傳遞--c_y

void change2(int &x){}

『別名』---x=s---》adress

編譯的時候就把x的位址就寫成和s一樣了。

void change2(const int &x){}

這樣即把位址傳過去了,同時又不允許實參被改變。

指標引用傳遞 --c_x

void (int *&x) {}

相當於指標『別名』傳進去,可以改變裡面的位址值了。

和**的關係?--可能也類似於引用的場景情況,需要初始化啥的。

c# ref int x

然後引數定義符號和呼叫時的符號有交叉混雜。讓**看起來讓人頭大。

如c_r,c_y--呼叫時chang(x).應該是系統自動來判斷如何傳遞。

c_z--呼叫時可以chang(&x),&x就相當於指標*了,

指標*,帶不帶*又有很多講究。

複製---引數為引用物件

淺複製-- 系統預設是用「「位拷貝」的方式。值物件沒問題,指標物件會使指向同乙個位址。

深複製-- 要類裡面自己實現資料對應情況。 然而類都是很複雜的。不如建乙個新的。

j**a 沒有 修飾符 也不能用指標。都是值傳送。

如果s為基本型別,那這個值就是內容,是不能改變s值的。相當於c_r

如果s為引用型別(陣列,類),那傳遞過來的是位址, 相當於c_z和c_y的綜合。

c_x這種情況呢?c#中乙個類的指向都是固定為主為主把。=retrun =new。函式中對類進行填充。在函式中指向另乙個類?

j**a中也是副本傳遞的,無法改變指向,

要實現可能要再包一層,引用型別再包含引用型別。

使用場景

c_z多了一層結構。功能靈活,多了不確定性。

很多時候需求只要c_y這樣。c_y需要s已經初始化。

大概s已經有值,然後需要改變用c_y.

s是空的,需要分配位址賦值用c_z。或者需要改變s指向的物件。 通常s申明就是乙個指標變數。

這種區別使的程式風格大不一樣。引數申明,函式編寫。

c++可以直接把資料申明全域性變數,然後函式裡直接傳遞操作。j**a都要宣告成陣列或類結構。再對其傳遞操作。

函式式程式語言python 函式式程式設計

函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...

函式式程式設計

最近在看一些關於js方面的東東,除了些ajax的基本應用,還了解了些函式式程式設計 fp 的東東。雖然以前也玩過幾天lisp的,不過因為當時完全對fp的東西沒有概念,壓根就不知道原來這是list那一族最大的特性之一 另外我知道的還有個是gc,orz.光注意那些詭異的 表 去了。總結一下,傳統上認為f...

函式式程式設計

維基百科 函式式程式設計 英語 functional programming 或者函式程式設計,又稱泛函程式設計,是一種程式設計范型,它將計算機運算視為數學上的函式計算,並且避免使用程式狀態以及易變物件。函式程式語言最重要的基礎是 演算 lambda calculus 而且 演算的函式可以接受函式當...