函式呼叫不是通過單向的值傳遞嗎?為什麼不是指標也可以改變主函式k的值

2021-03-22 06:31:34 字數 2579 閱讀 9461

1樓:匿名使用者

k是全域性變數

值是所有函式共享的

就是說 對於所有的函式 k都是一個。

你說的是針對引數的。這裡k不是引數。

10.18是說明指標值的改變不會影響原函式嗎?

計算機c語言中被呼叫函式的指標發生變化則主調函式中的指標是否也發生相應改變

2樓:sunny風吹吧

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

3樓:匿名使用者

具體點,有題目麼。給出來

關於函式呼叫的問題,不是隻有通過指標才能改變實參的值的嗎?為什麼下面這個沒有用指標也變了值?

4樓:匿名使用者

就是指標啊,insert函式執行時,取得了main函式傳給他的str陣列的首地址啊,然後當然可以對陣列進行操作了。陣列的本質就是指標。str其實是一個指標常量,比如str[0], 你寫成*str是一樣的。

str[1]就是*(str+1)。

5樓:dn_海倫泰勒

void insert(char str)的形參就是傳入str首地址的意思,用陣列做形參的時候都是傳入陣列的首地址。

為什麼第一個是按值傳遞不改變實參的值? 第二個從呼叫函式fun(k,5)可以看出是地址傳遞,形參可 10

6樓:

c的函式中的形參是呼叫時實參的值拷貝,所以永遠不會改變呼叫時的實參。當型參是指標時,可以在被調函式中通過這個指標改變它指向的目標值;但這個形參指標若有變化,同樣是不能改變實參指標的。所以通過指標改變目標的問題不是形參、實參的關係而是指標的性質!

7樓:喵不語

第一個形參a,b都是普通變數,而第二個k本身就是地址!

下面這個簡單的程式,傳給被呼叫函式的不是變數值的一份拷貝嗎?那為什麼可以改變主函式中變數的值?

8樓:夜貓叫楓子

指標啊,好好看看書吧,似乎應該這樣寫才對吧

char fun( char *a )

9樓:sport心殤

被呼叫函式無法修改呼叫函式以傳值形式傳遞給它的引數,不過,當被呼叫函式修改陣列引數的其中一個元素時,呼叫函式所傳遞的那個陣列就會被實際的修改。

因為在c語言中,陣列引數是以引用形式進行傳遞的,也就是傳址呼叫

值傳遞實現的是引數的單向傳遞(實參->形參),指標傳遞實現的是引數的雙向傳遞(實參<->形參)。

10樓:匿名使用者

一樓解答的很好,不過有個筆誤(*m)=i應該是(*mm)=i,不知道我理解的對不對。

c 語言 為什麼呼叫函式的時候沒有指標,還是可以交換主函式的陣列的值 100

11樓:聽不清啊

這是因為 bsort() 的第一個引數是 int a它是一個陣列。呼叫時以 陣列名 height 作為實參。

在c語言中,陣列名,既是一個陣列的識別符號,height[i] 可以直接引用它的陣列元素,陣列名還表示陣列的首地址,也是指向陣列首地址的指標。所以,呼叫函式的時候還是使用了指標的。

程式中的函式

void bsort(int a, int n)與void bsort(int *a, int n)是完全等價的,可以直接替換(下面的函式體不需要改動)。

12樓:做而論道

呼叫函式時,引數,是個陣列,這也就相當於指標。

13樓:黃5帝

為什麼非要指標呢?用一箇中間變數也是可以的啊。

指標和中間變數的區別就是指標不改變內容,中間變數是改變變數的內容。

14樓:老鹹魚

(´இ皿இ`)路過,討積分

指標(&a、&b)作為函式實參,在子函式中交換a、b的值,在主函式中為什麼能改變a、b的值?

15樓:匿名使用者

因為計算機中,變數存放在記憶體中,記憶體都有一個地址,指標就是指向記憶體內

的地址的,如果把容指標作為實參進行傳遞,也就是把記憶體地址傳了過去,那麼操作這個指標所指向的記憶體塊,必然會改變這個記憶體的內容了。

而如果不是傳指標也不是傳引用的話,而是普通的變數傳遞,則不會改變記憶體內容,以為普通變數作為引數時,其實是在記憶體塊中新申請了一塊空閒塊,不是原來的記憶體塊,而函式呼叫完畢之後,這塊新申請的記憶體塊會由於變數的作用域失效而被系統**。

我打個比方好了,你有兩個生的雞蛋放在櫃子的第二層裡,你現在要把它們煮熟,你跟弟弟說,雞蛋在抽屜的第二層裡,你去把雞蛋拿出來煮熟(這裡相當於傳了指標,抽屜的第二層就是地址)

如果你跟弟弟說,去買兩個雞蛋放到抽屜的第三層,然後煮熟,接著吃掉,那麼,第二層的雞蛋還是第二層的雞蛋,你把第三層的雞蛋給怎麼了也不影響第二層的雞蛋

求採納,麼麼噠

c語言,c的值為什麼不是,c語言,c的值為什麼不是

c a a a b,b 4 這句反彙編後的內容如下,下面是分析,望採納 0040103d mov eax,dword ptr ebp 4 可見ebp 4的地方儲存a的值,這條指令將 a 的值放到暫存器eax中 00401040 add eax,1 eax值加1,也就是a a 1 00401043 m...

騙取到付費用,不是給快遞錢嗎?為什麼說是被騙了錢

快遞費對面已經付完了,然後發貨用貨到付款,這樣貨到了你手裡就是要收取費用了,這個費用直接就給發貨人了,不是收取快遞費,比如我發貨給你,我出運費,但是這個貨到收件人手裡你得給我收取100元得貨物費,然後你收貨直接給快遞員,快遞直接把錢打到我得賬戶上了 3種情況。1假冒的快遞公司,假冒快遞員,送貨到門口...

為什麼反比例函式變化不是均勻的

因為反bai比例函式的影象不是du 直線 或者說是zhi線性的 dao所以反比例函式內變化不是均勻的。容 反比例函式 如果兩個變數的每一組對應值的乘積是一個不等於0的常數,那麼就說這兩個變數成反比例。形如y k x k為常數,k 0,x 0 的函式就叫做反比例函式。反比例函式的影象屬於以原點為對稱中...