1、int *add—–return &c;
2、int add——return c;
3、區域性變數不允許以引用(或者指標)形式返回,函式結束,區域性變數生存期就到了
int &add(int a,int b)
void main()
什麼情況下可以以引用返回?
1、返回值定義在全域性
int c=0;
int & add(int a,int b)
void main()
2,靜態量
int c=0;
int & add(int a,int b)
void main()
靜態資料成員只初始化一次,以後不會在呼叫,可見性在函式內,生存期在全域性
void fun (int x)
void mian ()
3.以引用接收,以引用返回
int & fun (int &a)
void main()
void fun1(int a);//傳值
{}void fun2(int &a);//引用=>fun2(int * const a)
{}void main()
==>
fun1(10);//編譯通過
fun2(10); //編譯不通過,不能把字面常量給指標,要給位址
字面常量
1. int a=10;整型字面常量
char x=』a』;整型字面常量
2. a=010;八進位制字面常量
3. a=0x10;十六進製制字面常量
4.float ft=12.33f;單精度浮點型字面常量
=12.23 雙精度。。。
5.char *p=」qweq」字串字面常量
char ch=;//陣列,非字面常量
char ch2=」qwe」;//陣列,非字面常量
引用1、常變數能力擴大—不行
void main ()
2、變數能力縮小—可以
void main()
3、
編譯器不同,結果不同
void main ()
why要用臨時量作為過渡?
由於c++極其不安全(指標本身不安全),若把b的常性去掉,沒有中間臨時變數tmp,那b就可以直接改變a,而產生臨時變數,即使改變b的常性,也不會對直接a造成影響
void fun3(int *a);//指標
區別於
viod fun2(int *const a)
void fun2(int &a)引用
傳指標,自身可以改變,指向也可以改變
傳引用,自身不能改變,指向不能改變
void fun4(int ar);//陣列做形參,退化為指標
int add(int a,int b)
void main()
函式呼叫時,區域性變數產生,當函式結束時區域性變數銷毀
把c給z,要建立臨時變數(eax),不可存到記憶體中(若存到記憶體中,則需要記憶體位址,要找到存放的位址,則需要找到位址存放的位址,無窮無盡根本找不完)
int * add(int a,int b)
void main()
//==>輸出隨機值
void fun5(int (&br)[10]);//引用陣列,對br不改變
//void fun1(int br)
void fun1(int *s);
void fun2(int (*p)[10]);
void main()
; const
int n=sizeof(ar)/sizeof(ar[10]);
fun1(ar);
fun2(&ar);
}
函式返回值和形參
函式包括了除函式名以外還有返回值和形參。這個形參包括了傳入引數和傳出引數 傳入引數 就是數值的傳遞。在函式中不會修改這個引數,不會修改呼叫這個函式的函式的值。例如void exchange int a,int b int main 輸出的結果是 a 4 b 5 這是傳參,僅僅是乙個數值的傳遞。在呼叫...
函式 形參沒有返回到實參
演算法訓練 排序 問題描述 編寫乙個程式,輸入3個整數,然後程式將對這三個整數按照從大到小進行排列。輸入格式 輸入只有一行,即三個整數,中間用空格隔開。輸出格式 輸出只有一行,即排序後的結果。輸入輸出樣例 樣例輸入 9 2 30 樣例輸出 30 9 2 知識點 c語言中函式的引數有 兩種傳遞形式 1...
函式引數 普通形參和引用形參
在呼叫函式時候,引用形參和普通型參是有著很大的區別。首先看函式在使用普通型參時候,編譯器是怎麼工作的。在函式呼叫的時候,編譯器為被調函式在棧空間申請一塊記憶體,此時普通形參也在這塊記憶體取,被實參初始化。說到這裡就明白了,在被調函式執行完畢後,編譯器會將其彈出棧空間。因此,形參也就消失了,此時主函式...