重溫C 指標以及函式的乙個小回顧

2021-10-01 16:45:46 字數 475 閱讀 1946

指標和函式最為經典的乙個例子是交換函式的應用:

void swap1(int a, int b)

void swap2(int *a, int *b)

之前一直不是很懂,為什麼swap2的輸入引數形式是int*a。主要還是因為當時對指標的真正意義還是不夠理解。函式的輸入引數其實前面的int*,或者是int,float,都是指明輸入的輸入型別是什麼。這裡的int* a,其實指的是「輸入乙個整數指標型別,將其賦值給函式內部的臨時變數a」,也就是說,這裡的a擁有的就是指標的值。

那麼為什麼swap2就能真正實現交換資料呢?因為函式的傳遞引數過程,是不會對外部的變數造成影響的。而指標的真正含義是所指向變數的位址,當函式擁有變數的位址時,其就能對該位址的變數進行操作了。與swap1不同的地方在於,swap1改變的臨時參量和外面的變數沒啥關係,而swap2由於直接操作的是外部變數的位址,所以當然可以改變外部變數。

乙個指標函式的問題

看到乙個某公司的面試題目如下 char getstr1 void char getstr2 void 問如果呼叫這兩個函式進行賦值的話,輸出的值分別為什麼?如果不仔細想的話,回答是輸入的結果一樣 hello world 然而非也,實驗證明以上的答案是錯的 函式getstr1返回值為輸出的亂碼,函式g...

C 指標,巨集,以及乙個檔案所需的部分

指標類物件的指標與引用 建構函式 這裡列乙個簡單的例子再來講解它的含義。巨集定義,用在這裡是告訴編譯器一些事。比如說,我加入了乙個檔案裡,include 兩個檔案 l1.h l2.h但是,事實上,l1.h包含了l2.h,如果兩個檔案都載入,那就沒有必要了。就是類似的,如果沒有su log h,就定義...

C 做乙個返回陣列指標的函式

這個問題我已經不是第一次遇到了,由於不是總程式設計,所以總會忘記這一點 在c 中是不允許陣列作為函式的返回值的 所以想要函式返回乙個陣列,那麼只能返回這個陣列的指標,然後在想呼叫這個陣列的函式中新建指標然後呼叫這個函式。舉個例子 生成含有範圍屬於 begin,end 的188個隨機整數的陣列 int...