C C 指標作為函式形參注意點

2021-10-07 11:12:26 字數 1028 閱讀 8741

函式形參是指標變數,直接對其賦值(指標相互賦值),只是改變了它的指向,原先傳入的指標指向的內容並沒改變;

若要想改動其指向的值,需要通過memcpy或通過指標呼叫賦值;

#include #include #include #include #include #include #include using namespace std;

int fun(int *c)

int main()

以上**輸出:a和a的值未改變;

d_underdrive_pc/src$ ./pointer_test.o 

>> : in fun , c = 10

>> : in fun , c = 10

>> : a = 1

>> : a = 1

**更改如下:

#include #include #include #include #include #include #include using namespace std;

int fun(int *c)

int main()

以上**輸出:a和a的值改變;

>> : in fun , c = 10 

>> : in fun , c = 10

>> : a = 10

>> : a = 10

指標變數, 在訪問其指向物件之前,需要先給其指定物件(分配記憶體空間),否者會出現「」段錯誤 (核心已轉儲)「」:

printf("**** 0000 **** ! \r\n");

float* a;

*a = 1; //錯誤,此時a未指向任何記憶體空間

printf("****111**** ! \r\n");

輸出:

**** 0000 **** ! 

段錯誤 (核心已轉儲)

指標作為函式形參

先來看兩個程式 程式1 include void fun int p int main void 輸出為 程式2 include void fun int p int main void 輸出為 對於程式2,不難理解 程式1,明明改變了p的指向了,為什麼還是輸出1呢?其實問題的關鍵不是指標作為形參的...

C C 中陣列作為函式形參後退化為指標

最近寫了乙個函式,把陣列作為了它的引數,在這個函式中用到了這個陣列的長度,按照正常的求長度的方式,應該不會出錯 但是執行之後發現結果卻不是我想要的。於是寫了乙個測試程式來驗證我的猜想,驗證陣列做函式形參是否會退化為指標。include using namespace std void sort in...

指標作為形參進行傳遞注意事項

參考 include using namespace std int m value 1 void func int p int main int argc,char argv 執行結果 2 2 修改func函式如下 void func int p 執行結果 2 3 修改func函式如下 void ...