Ⅰ c語言如何在局部函數里,改變指針的指向
1、如果函數參數直接傳遞的是指針類型,那麼在函數內改變指針指向,並不能影響函數外的指針實例。只有傳入指針的指針,才能改變指針的指向。
2、函數里的形參是一般變數,在函數裡面改變變數的值,不會改變主函數里實參的值。指針就是地址變數,在函數里改變地址變數的值時,不會改變主函數實參地址變數的值。只有在函數里改變指針所指向的變數的值時
主函數實參指針所指向的變數的值才會改變。
Ⅱ c語言指針指向的局部變數釋放
函數完成只釋放局部變數本身佔用的空間,如果變數是指針變數,則不會釋放指針指向的空間
Ⅲ C語言指針指向局部變數內存能釋放嗎
1、這個是由系統對象回收機制來決定的,你可以調用系統gc命令,
2、設置h=null 可以作為釋放,不會內存泄露,但是至於釋放真實釋放由系統來決定
Ⅳ C語言中 局部指針變數傳給函數參數的過程
沒列印
直接掛掉
你的P沒有初始化 是野指針
於是ptr的值也就是隨機值
賦值*ptr導致野指針賦值,非法訪問,掛掉。
Ⅳ C語言 局部函數里指針地址賦給另一個指針沒有作用
當然沒有作用。指針作為形參時也只是拷貝了實參的「值」,所以對指針本身的改變不是永久性的。
Ⅵ c語言相關問題:函數返回局部指針變數
首先你要理解運行時執行棧的概念,運行在一個函數中的時候,局部變數是依次壓在棧區的,函數返回後釋放,相同的地址可能被下一個運行的函數中的局部變數重用。
如果注釋掉fun2,你只調用了fun1,局部變數p1的值為fun1裡面j所佔的地址,內容為5,返回後p=p1, *p 為 5,
如果不注釋掉fun2, fun1退出後,執行棧上繼續運行fun2.由於fun1的j和fun2的j1所在的偏移相同,它們在實際內存中所佔的地址也是相同的,所以p2的值,也就是fun2的j1的地址,也就是fun1的j的地址,它的內容被改為10,所以p現在等於p1等於p2等於j1的地址等於j的地址,所以內容是10
另外,你這個程序肯定是錯的,別這么寫,考試肯定掛,上班肯定被開除
Ⅶ 為什麼C語言函數中可以返回局部變數而不能返回局部變數的指針詳解+深解
在C語言中,局部變數的作用域只在函數內部,在函數返回後,局部變數的內存就會被釋放。如果函數只是返回局部變數,那麼這個局部變數會被復制一份傳回被調用處。但是如果函數返回的是局部變數的地址,那麼就會報錯,因為函數只是把指針復制後返回了,但是指針指向的內容已經被釋放,這樣指針指向的內容就是不可預料的內容,程序就會出錯。准確的來說,函數不能通過返回指向棧內存的指針(返回指向堆內存的指針是可以的)。
Ⅷ C語言中「指針」和「指針變數」的區別是什麼
1、概念不同
「指針」是概念,「指針變數」是具體實現,指針也是一個變數,所以需要進行定義,而對於指針的定義,與一般變數一樣。
2、 存放地址不同
一個變數的(內存)地址稱為該變數的「指針」,通過指針能找到以它為地址的內存單元。而指針變數是用來存放另一個變數的地址的(即指針)。
(8)c語言局部指針擴展閱讀:
指針和指針變數的關系
1、指針就是地址,地址就是指針。
2、地址就是內存單元的編號。
3、指針變數就是存放內存地址的變數。
4、指針和指針變數是兩個不同的概念,但要注意的是,通常我們敘述時會把指針變數簡稱為指針,實際他們含義並不一樣。
註:
指針里存的是100. 指針:地址 - 具體。
指針里存的是地址,指針:指針變數 -可變。
指針的好處:
1、直接訪問硬體
2、快速傳遞數據(指針表示地址)
3、返回一個以上的值返回一個(數組或者結構體的指針)
4、表示復雜的數據結構(結構體)
5、方便處理字元串
6、指針有助於理解面向對象
Ⅸ 在C語言中什麼是指針指針是干什麼用的,有什麼意義
寫簡單的程序的話不用指針也行了吧. 比如, int a = 2; int* p = &a; *p = 3; 這里a是一個地址(編譯後), 為了讀寫這個地址單元里的東西,可以用p,也可以用一般變數a. 對於指針的便利,我現在能想到的,可能是: 函數A調用函數B時,把一個內存塊的地址傳遞過去,這樣可以避免按值傳遞時開辟一個棧空間並逐一拷貝內存塊里的值的開銷(C++里的拷貝構造函數在做這件事),並且A,B函數操作的都是同一個內存塊里的東西,如果這就是目的,那麼傳指針就是很有效率的做法(如果不用指針就可能要用一個全局的變數了). 用一個指針(函數指針)存放一系列同類型的函數名(入口地址),方便函數調用. void*類型指針可以存放任何類型指針. 讓父類類型指針指向任何子類對象可以實現動態綁定. 寫著寫著似乎指針還挺有用,呵呵. 我相信指針的使用一定要很小心,否則可能要忍受程序報錯而總找不到錯在何處的痛苦. 有一些比較極端的例子, 如一個函數返回了一個函數里局部變數的指針,一用就出錯; 如聲明一個指針沒有分配空間就傳給別一函數使用; 如多個線程都在使用同一個內存塊,你修我改,甚至有人把它刪掉了或不小心讓指針指向系統用的內存,另一個人還准備往裡讀寫東西---可能要費心思來同步. 如指針指向的內存可能是new/malloc出來的,可能要想辦法及時刪除並要保證沒有別的線程要用...
Ⅹ C語言指針的定義
指針就是地址。
你說的是指針變數。
整形變數,浮點變數,字元變數,指針變數。通過起名的規律就知道指針變數是儲存地址的。
指針變數和其他變數的用法一樣,作用域一樣。在一個子涵數中定義指針變數,是局部變數,其他函數是不能用的。
不要把指針變數想的太復雜,地址(指針)也是數據,和其他字元數據,整形數據一樣,沒什麼差異。
當然,全局變數的指針變數當然可以多函數使用。
指針的定義:地址。
指針變數的定義:存儲指針的變數。