函式形參是指標變數,直接對其賦值(指標相互賦值),只是改變了它的指向,原先傳入的指標指向的內容並沒改變;
若要想改動其指向的值,需要通過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 ...