在上文中函數scanf()就是使用地址做爲參數。更通常地,當須要改變調用函數中的某個數值時,任何被調用的無返回值的C函數都須要使用地址參數來完成該任務。函數
一元運算符&能夠取得變量的存儲地址。假設pooh是一個變動的名稱,那麼&pooh就是該變量的地址。一個變量的地址能夠看做是該變量在內存中的位置。假定使用了下面的語句:code
pooh = 24;內存
而且假定pooh的存儲地址是0B76(PC的地址通常以4位十六進制的形式表示)。那麼語句:io
printf("%d %p",pooh,&pooh);class
將輸出以下數值:變量
24 0B76object
在程序清單9.12中,咱們使用地址運算符得到不一樣函數中具備相同名稱的變量的存儲地址。程序
程序清單9.12 loccheck.c程序 /*loccheck.c --查看變量的存儲地址*/ #include <stdio.h> void mikado (int); /*聲明函數*/ int main (void) { int pooh = 2,bah = 5; /*main()函數中的局部變量*/ printf("In main(),pooh = %d and &pooh = %p\n",pooh,&pooh); printf("In main(),bah = %d and &bah = %p\n",bah,&bah); mikado(pooh); return 0; } void mikado(int bah) /*定義常量*/ { int pooh = 10; /*mikdo()函數中的局部變量*/ printf("In mikado(),pooh = %d and %pooh=%p\n",pooh,&pooh); printf("In mikado(),bah = %d and &bah = %p\n",bah,&bah); }
上述輸出結果說明了如下問題:首先,兩個pooh變量具備不一樣的地址,兩個bah變量也是如此。所以,正如咱們所料,計算機會把它們看做4個獨立的變量。其次,函數調用mikado(pooh)確實把實際參數(main()中的pooh)的數值2傳遞給了形式參數(mikado()中的bah)。須要注意的是這種傳遞只是進行了數值傳遞,兩個變量(main()中的pooh和mikado()中的bah)仍分別保持原來的特性。
每個C函數都使用本身的變量。這麼作更可取,由於它可使原變量不因被調函數中操做的反作用而意外的被改變。 計算機