當前位置:首頁 » 編程語言 » c語言函數退出時改了指針
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言函數退出時改了指針

發布時間: 2022-07-30 14:22:57

c語言指針在函數調用中的問題

這說明你對指針和函數參數傳遞的理解不到位

這個程序里你想用函數F改變p,那麼就要給F傳遞p的地址,p的類型是int*,那麼它的的地址類型是int**,傳遞&p給F:

intmain()
{
voidF(int**p);//int**

int*p=NULL;
F(&p);//傳地址
printf("%d",*p);
deletep;//釋放
return0;
}
voidF(int**p)//int**
{
*p=newint;
**p=1;
}

或者用C++的引用:

intmain()
{
voidF(int*&p);//int*&

int*p=NULL;
F(p);//這里就是引用了
printf("%d",*p);
deletep;//釋放
return0;
}
voidF(int*&p)//int*&
{
p=newint;
*p=1;
}

㈡ c語言如何在局部函數里,改變指針的指向

1、如果函數參數直接傳遞的是指針類型,那麼在函數內改變指針指向,並不能影響函數外的指針實例。只有傳入指針的指針,才能改變指針的指向。
2、函數里的形參是一般變數,在函數裡面改變變數的值,不會改變主函數里實參的值。指針就是地址變數,在函數里改變地址變數的值時,不會改變主函數實參地址變數的值。只有在函數里改變指針所指向的變數的值時
主函數實參指針所指向的變數的值才會改變。

㈢ C語言函數返回指針

第二種方法,跟第一種只是參數和返回值不同而已。
初看時需要在第二種中申請內存返回出來,但是字元串為局部變數時其實也是存在靜態內存中的,不會因為函數退出而失效,直接將函數內拼裝的字元串返回出來也是可以的,你也可以加上static定義什麼的也沒問題。

㈣ C語言函數調用問題

C所有的函數調用都是將實參的值「拷貝」給形參,所以指針也不例外。函數中改變形參指針的值改變的只是形參指針的指向,函數退出後都銷聲匿跡了,與實參指針無關。

㈤ 計算機c語言中被調用函數的指針發生變化則主調函數中的指針是否也發生相應改變

函數是單向傳遞的 如果實參是指針 在被調用函數中改變的是指針 則屬於單向傳遞 主函數中指針不變。 如果被調用函數中改變的是指針所指向的值 那麼主函數中這個值 變化了 但是指針沒變化

㈥ C語言中函數返回指向棧內存的指針的問題

p是指向局部變數的指針,當函數退出時,局部變數會被釋放,這時,p所指向的位置就不一樣是原來的數。

因為fun()函數返回的值被計算機的臨時變數存放,當賦值給p的時候,p是指向臨時變數的地址,所以還可以讀取出100。

*p = "hello"這是常量字元串,從靜態存儲區分配,第一步字元串"hello"從靜態存儲區獲取一塊內存,指針變數p才指向這塊靜態內存,這塊內存的特點是從程序開始到結束一直從在,所以可以返回。

(6)c語言函數退出時改了指針擴展閱讀:

函數的返回值類型是在定義函數時指定的。return 語句中表達式的類型應與定義函數時指定的返回值類型一致。如果不一致,則以函數定義時的返回值類型為准,對 return 語句中表達式的類型自動進行轉換,然後再將它返回給主調函數使用。

在調用函數時,如果需要從被調函數返回一個值供主調函數使用,那麼返回值類型必須定義成非 void 型。此時被調函數中必須包含 return 語句,而且 return 後面必須要有返回值,否則就是語法錯誤。

㈦ 這個C語言的函數為什麼修改了傳入的指針卻沒改變main函數里的值

這就涉及型參傳值。add
函數中定義參數Node*& head就可以了,你試試

㈧ C語言,指針,函數 為什麼在函數中改變了指針主函數依舊不變 書上給的看不是太懂

C++可以通過異常處理的throw和catch來實現從子函數的子函數直接返回主函數,匯編語言可以用jmp指令跳轉實現這個需求。C語言主要靠函數調用和return在函數之間切換,很難做到在多層調用中直接返回主函數。雖然goto語句可以無條件跳轉,但是必須在同一個函數中使用。因此解決的方法也是用一個特殊的值作為需要返回的標志,然後在兩層調用函數中都遇到該值就返回,但是這個方法也有兩個前提:1)你的兩個子函數都是由返回值的函數2)你選擇的特殊值和函數正常的返回的取值不會沖突,不會引起二義性。因此建議你的這個問題還是用C++ 的異常去解決比較好。