C語言有沒有操作知道乙個變數有沒有被引用

2025-01-18 00:40:26 字數 4116 閱讀 1846

1樓:網友

奇思怪想,根本沒有這樣的必要,底層變數或者指標是否被訪問過(你說的使用過)為什麼要知道?從模組化變成到物件導向程式設計的其中乙個目的就是名稱空間隔離,變數就是為了儲存資料的,為了防止變數命名上的衝突,保證了變數的專用性,如果不要了可以主動**/釋放或者等待函式返回自動釋放。

變數本身是否被訪問過根本不需要跟蹤,一方面多餘,一方面浪費cpu時間。一般情況下需要跟蹤某種狀態時我們可以設計一些特殊變數記錄一些狀態,而特殊情況下,當訪問某變數或者改變某變數之後主動去觸發事先定義的事件,通知客戶程式事件函式處理,客戶程式發現有事件之後會暫停當前處理轉去執行事件函式,完成後恢復原先的事務。而不是由客戶程式主動去掃瞄,你說的這種開發思路屬於已經淘汰的程序導向的設計思想,因為主動掃瞄需要程式不斷去檢測,很消耗cpu資源。

另外,採用事件呼叫不需要你顯式的編寫判斷位址的**。

這種事件呼叫方式,在windows程式設計中還有個形式叫做**函式。

2樓:網友

語言沒有任何機制對某個變數進行過訪問進行記錄,所以不行。

3樓:細雨在微笑

不知你想幹啥?檢查彙編不是好的方法,可以修改編譯器,輸出你想要的資訊,你也可以自己遍歷原始碼,在產量作用域範圍內搜尋變數名。

4樓:夏侯辰逸

對於運算元在記憶體中的位址,有些指令本身就包含了運算元,比如mips的addi指令,這種運算元沒辦法獲取位址訪問。你指的運算元應該是變數形式的,這種情況可以用取字和存字指令進行訪問。

至於判斷乙個變數有沒有被引用,並不能只看上一條指令。而應該看整個作用域,構造出引用關係圖才行。

5樓:豐韓餘暢

ata等於零。我想日。還有沒有被使用,比如,a,等於是或者b等於a能否通過會變命令得到運算元字。

若在。記憶體中的位址如果能得到上一條指令的蔬菜內層中的位址如果能得到上一條指令的運算元位址,我就能通過if括號圈aa。大約操作書籍是。

來判斷。有沒有被使用過?求大神指點。

c語言有沒有引用

6樓:網友

c語言中並沒有引用!

引用是c++中的。

c++之父提議,少用指標,儘量使用引用。

因為,幾乎使用指標的地方都可以用引用替代,使用引用是對目標變數的直接操作,而指標是。

間接操作,不產生記憶體副本……等等好處。

7樓:網友

你說的是&嗎?可以的,有**證明可以。

這是乙個建立乙個線性表的函式,其中形參linklist &l即為引用}

c語言中有沒有「引用」這個概念?

8樓:匿名使用者

其實c語言沒有引用,只是作為取位址;引用符「&」是c++語言中有。

9樓:賣**的小小孩

這篇文件還是不錯的。

10樓:

有的。如:

int a;

int &b=a; //定義引用變數b,對b的操作,就是對a的操作。

c語言函式沒有被呼叫會給裡面的變數分配記憶體空間嗎?

11樓:貊友桃波納

子函式的變數是在子函式中被定義的。

如果變數不是靜態變數,那麼定義的變數會在函式呼叫的時候,將其記憶體空間分配在棧(stack)中。

不呼叫的時候不會分配空間。

如果變數是靜態變數,在編譯的時候就會分配記憶體空間。

12樓:鎮初五依霜

取決於你的編譯器,如果編譯器有這種優化功能的話,沒用的**可能會被去掉,正常編譯的話,不管有用沒用,都會分配的。

13樓:門天巧杭翠

全域性變數是在main函式之前就分配。

區域性變數在定義時分配,超出作用域後釋放。

靜態區域性變數只分配一次,程式退出後才釋放。

函式引數與區域性變數基本上相同在進入函式時分配,函式結束時釋放。

c語言有引用傳遞嗎

14樓:free無敵小萌新

c語言沒有引用傳遞,只有c++有,c語言中函式引數總是通過值傳遞,可以通過顯示傳遞指標值模擬引用傳遞,而直接用&的引用傳遞會報錯,你那程式把原始檔改成cpp檔案應該能用,至於嚴老師的只是偽**,提供乙個程式執行結構而已,大體按照c語言編寫,有一部分是c++的東西。

15樓:網友

很多編譯器c c++是共用的 c中有c++**也能過。

也可以把引用換成指標。

有時候c和c++的界限不是很清晰。

16樓:吉祥二進位

引用:就是某一變數(目標)的乙個別名,對引用的操作與對變數直接操作完全一樣。這是c++加入的新特性,在c語言中沒有引用的概念。

引用的宣告方法:型別識別符號 &引用名=目標變數名;,比如:定義引用ra,它是變數a的引用,即別名。

int a;

int &ra=a;

1)&在此不是求位址運算子,而是起標識作用。

2)型別識別符號是指目標變數的型別。

3)宣告引用時,必須同時對其進行初始化。

4)引用宣告完畢後,相當於目標變數有兩個名稱即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名。

5)宣告乙個引用,不是新定義了乙個變數,它只表示該引用名是目標變數名的乙個別名,它本身不是一種資料型別,因此引用本身不佔儲存單元,系統也不給引用分配儲存單元。故:對引用求位址,就是對目標變數求位址。

ra與&a相等。

6)不能建立陣列的引用。因為陣列是乙個由若干個元素所組成的集合,所以無法建立乙個陣列的別名。

c語言區域性變數可以被其他的原檔案引用嗎

17樓:杏章佳堅白

不能,區域性變數存放在計算機記憶體的棧區,當退出缺春其所在函式時,此區域性變數就被蠢扮擾釋放,故不能被別的帶旦原檔案引用。

18樓:門斯斐文君

不可以的,要使用區域性變數的值的話可以用指標變數,它是雙向傳遞的。

c語言中有沒有辦法可以知道乙個變數的型別

19樓:網友

不可能坐到這點的,唯一的方法就是譬如說你下位機要給上位機傳送nk位元組的char型別資料,那麼你可以在傳送這些資料之前,先發乙個用以標識接著傳送資料型別的flag(這個flag可以是你自己定義的結構體,或者列舉型別,譬如說 typedef enumtype;)這樣你先傳送乙個type型別的內容給上位機,上位機通過這個type的值來判斷接著要接收什麼資料。

而我之所以說不可能做到直接判斷是什麼資料型別,是因為你想想看,同樣21這個資料,既可以是int,也可以是char,更可以是uint或者別的,所以怎麼可能光憑這個資料本身來判斷是什麼資料,要是能做到那樣的話,那通訊的時候也就不需要「協議」這個概念了。

何為引用操作?在c語言中如何實現?

20樓:匿名使用者

引用就是&操作符,用來將變數位址賦予指標。

操作是(假設type是一種變數型別,比如int double等)type a;普通變數。

type * p; 定義指標。

p = &a;引用操作。

注意,&只能跟變數,不能是表示式,常量,register修飾的變數。

21樓:匿名使用者

c語言沒有引用啊,c++才有。

引用能起到指標的部分作用,但是比指標安全。

乙個引用可以看作是某個變數的乙個"別名"。對引用進行操作就像對原變數進行操作一樣。

主要用於函式的引數傳遞時使用。因為c語言沒有類似vb的「傳引用呼叫」這個功能,所以c++的引用填補了這個空白。從此即使需要改動引數,也直接傳遞乙個變數過去即可。

這在操作符過載中有更重要的意義。

int a; //宣告變數a

int& ra = a; //宣告乙個引用,名字是ra,ra引用了a注意,ra宣告的時候必須同時給出它到底引用了誰int& ra; //只宣告不指明是不對的。

還有,引用一旦宣告,就不能再修改到其他變數上了,這與指標不同。

ra = b; //這是不行的,因為已經int &ra = a了。

c語言問題,乙個c語言問題?

你.是不是諶衛軍老師班上的.然而我也很菜 逃.include int is same char str,char s str在s中的出現次數 p strtok null,return flag int main ge j strlen s m j for j 0,k 0 jge i j 從第二個單詞...

c語言程式問題,不知道錯那了,乙個c語言程式問題,不知道錯那了

ghfychg ocojijovhhn.pjujicogogv ucohkjj cuhkkv ucjgcbk gfohgibvb focnlvo fxhbobpco cjbpjobl hibhobk gvcj ljl c語言程式不知道哪錯了 不能這樣賦值。你可以 include stdio.h st...

C語言程式設計題目,乙個C語言程式設計題目

include int main 先乘以10000得到一bai個整數。需要du判斷是正數還是zhi 負數,執行 5還 或是 5,這dao個整數再專除以10000,即可屬得到你要求的結果了。include include double double3 double x int main double ...