第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C語言“局部變量作用域”的問題

C語言“局部變量作用域”的問題

C
慕娘9325324 2019-03-16 11:11:13
void add(int);main(){int num=3;add(num); //調(diào)用add()函數(shù) printf("%d\n",num); //輸出變量num值為3 }void add(int num){num++; //num自增1 printf("%d\n",num); //輸出變量num值為4 }為什么不對呢?哪里不對呢?
查看完整描述

8 回答

?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗 獲得超8個贊

這里涉及到變量作用域的問題,局部變量的作用域從聲明開始,到所在函數(shù)的結(jié)束,,在子函數(shù)內(nèi)的變量,同名的其他變量將被暫時屏蔽。所以會出現(xiàn)以上情況。在add函數(shù)內(nèi),add內(nèi)的sum將暫時屏蔽main內(nèi)的sum,但這兩個sum并不是同意變量,你可以將他們在內(nèi)存的地址打印出來證明一下。這時候add的sum接收傳入的值3,自增后為4,將打印4,在add函數(shù)結(jié)束后,main內(nèi)的sum恢復(fù)作用,但他們不是同意變量,所以main內(nèi)的sum值并沒有改變

查看完整回答
反對 回復(fù) 2019-03-25
?
長風(fēng)秋雁

TA貢獻(xiàn)1757條經(jīng)驗 獲得超7個贊

這個和局部變量作用域沒什么關(guān)系.
而是傳參方式.
add函數(shù)傳值調(diào)用, 而不是傳指針調(diào)用.
所以在add中改變形參num的值,不會影響主函數(shù)中實參num的值.

查看完整回答
反對 回復(fù) 2019-03-25
?
慕后森

TA貢獻(xiàn)1802條經(jīng)驗 獲得超5個贊

沒有什么不對啊。完全正常的。

因為從main()調(diào)用add( )函數(shù)時的實參num=3在完成了傳遞值以后,main( )與add( )函數(shù)的變量之間就相互沒有了關(guān)系。add( )函數(shù)中num++并輸出4以后,對main( )函數(shù)中的變量沒有絲毫的關(guān)系,所以返回后,輸出main( )中的num的值仍是3。



查看完整回答
反對 回復(fù) 2019-03-25
?
郎朗坤

TA貢獻(xiàn)1921條經(jīng)驗 獲得超9個贊

add函數(shù)里面的num是另一個變量,和主函數(shù)中的num不一樣。它們兩都是臨時變量,除了變量名相同沒有什么關(guān)系。

add函數(shù)只是通過參數(shù)的方式獲取了主函數(shù)里面的num的值,也就是給了add中的num初始值,但是并沒有把計算后的值返回給主函數(shù)中的num,所以主函數(shù)中的num并沒有被改變

1

2

3

4

5

6

7

8

9

10

11

12

13

main()

{

   int num=3;

   add(num); //調(diào)用add()函數(shù) 

   printf("%d\n",num); //輸出變量num值為3 

}

 

//把變量名換一下就明白了,這個變量和num是兩回事,和局部變量作用域沒有半毛錢關(guān)系

void add(int aa)

{

    aa++; //aa自增1 

    printf("%d\n",aa); //輸出變量aa值為4 

}

 


查看完整回答
反對 回復(fù) 2019-03-25
?
慕田峪9158850

TA貢獻(xiàn)1794條經(jīng)驗 獲得超7個贊

因為你的add函數(shù)是傳值進(jìn)來的,不是傳址。你對形參自增,也只是將新的變量num自增了而已,原先的變量num,還是不會變的。
除非,你 void add(int *num) { *num = *num + 1;printf("%d\n",*num);}
外面就 add(&num);

查看完整回答
反對 回復(fù) 2019-03-25
?
九州編程

TA貢獻(xiàn)1785條經(jīng)驗 獲得超4個贊


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//注釋的描述應(yīng)該都對沒有錯。

//如果說時編譯不過,時因為缺少頭文件和main函數(shù)返回類型

#include <stdio.h>

void add(int);

void main()

{

    int num=3;

    add(num); //調(diào)用add()函數(shù) 

    printf("%d\n",num); //輸出變量num值為3 

}

void add(int num)

{

    num++; //num自增1 

    printf("%d\n",num); //輸出變量num值為4 

}

 


查看完整回答
反對 回復(fù) 2019-03-25
?
慕工程0101907

TA貢獻(xiàn)1887條經(jīng)驗 獲得超5個贊


你的注釋里面的輸出是對的。

這個問題并不是探討局部變量作用域的問題,而是函數(shù)是傳值還是傳址的問題。傳值,指的是參數(shù)傳遞的過程中,傳過去的參數(shù)實際傳入的是這個變量的一個拷貝而不是這個變量本身。因為對變量拷貝所以對拷貝后的變量做任何更改都不會改變變量本身。如果需要改變變量本身,可以傳遞變量的地址過去,再修改地址里面的內(nèi)容。這是指針的知識。以后你學(xué)到指針,你就會明白這個道理。下面附的代碼是討論作用域的問題。

1

2

3

4

5

6

7

8

9

10

int a =1;

main(){

    printf("a1 = %d\n",a);

    int a = 2;

{

    int a =3;

    printf("a3 = %d\n",a);

}

    printf("a2 = %d\n",a);

}


 


查看完整回答
反對 回復(fù) 2019-03-25
?
白衣染霜花

TA貢獻(xiàn)1796條經(jīng)驗 獲得超10個贊

首先,這不是“局部變量作用域”的問題。
C語言中,函數(shù)的數(shù)值傳遞常用的有兩種方法:變量傳遞、指針傳遞。
顯然,你使用的是變量傳遞。
add(num); 這個函數(shù)的作用是傳入一個數(shù)值,然后這個數(shù)值加一。注意,這里僅僅是對傳入的數(shù)值3進(jìn)行加一,不是對main()函數(shù)中的num變量加一。所以無論你在add(num)函數(shù)中對傳入的數(shù)值做任何操作,都不會改變main()函數(shù)中的變量num。

查看完整回答
反對 回復(fù) 2019-03-25
  • 8 回答
  • 0 關(guān)注
  • 939 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號