C語言程式設計

2022-09-27 06:57:07 字數 922 閱讀 3952

1樓:匿名使用者

取地址,scanf是一個小函式,其中第一個引數為一個字串"%d",這個引數說明了要讀取的資料為int型。其從輸入流中讀取一個只含有數字的字串,然後轉而賦值給取進來的地址。

由於函式傳遞的只是地址,scanf("%d",n);實際上傳遞的另外一個引數為n的數值(對其的訪問也僅僅是一個數值而已),由c語言的規定,該int的值管在此被呼叫函式中執行時,程式新分配了一個記憶體,賦值為了它的值,而所有的操作是基於這個新分配的記憶體上的,所以儘管在被調函式內其數值已經改變,返回到主函式中來時n的地址處的記憶體是沒有改變的。

當修改成了n的指標時,實際上傳遞的是n的地址值,所以操作才可以基於原記憶體(新的分配的記憶體為一個int型指標,指向n的地址),對該指標的賦值就起到了對原有地址賦值的作用,所以賦值才是成功的。

出現上面的結果,是因為傳遞的引數型別問題,當引數型別不相符合時,編譯器將對其進行強制型別轉化,當然就出錯了~~

實際上被呼叫函式在執行的過程中,新引用了記憶體,它對相應記憶體修改的記憶體在返回時已經被銷燬了,並可以用一個小程式說明這個問題:

void plus(int x)

main()

2樓:智趣派

輸入的時候,scanf會將從輸入裝置讀到的內容傳到一個記憶體地址中。而&就是取地址符。所以&n是將輸入的資料儲存到n的記憶體空間中,如果去掉了取地址符,那麼等於改變了n的地址,這樣n將變成一個不可**的結果,導致程式出錯!

3樓:匿名使用者

scanf函式定義中第二個引數應為指標,故應取n的地址&n。寫scanf("%d",&n)沒有意義,則n是在為初始化的情況下(為隨機數,1983750598就是一個這樣產生的數)進入迴圈的。造成了死迴圈。

4樓:幹嗎尋找周杰倫

&在這裡是取地址符,如果你不加的話,是要出記憶體錯的。

c語言程式設計,C語言程式設計

int mian 應該是int main 你要輸入一個數才行,建議你加一個提示輸入的語句 c語言程式設計 判斷 字串 s是否和 相等 strcmp s,表示s字元陣列是否是等於號加上字串結束符,其實單單比較是否為等於號 改為 c語言程式設計。else 非字母 switch read buf brea...

c語言程式設計試題C語言程式設計試題

1.x 0 x 0 2.x y y temp 3.m i 0 i k 4.n 100 i i i j j j k k k 4.c getchar n 5.if k s printf 5d n m 0 m m 10 15.2 16.無法解答 17.b 18.48,0 19.c 21.a 23.14 希...

c語言程式設計題目,C語言程式設計題目

給你下思 來路吧第一個 素數演算法不好 源 改用素數篩 沒聽說過的 話 自己搜 很常用的演算法 第二個 對於a先求個位數 然後按照你的演算法求值如果還是超時的話 那麼進行折半遞迴 類似於int get value int a,int b int main include int cacu int a...