㈠ printf和scanf函數為什麼一個要取地址符一個不用呢
你用scanf輸入的時候,是要在函數內對變數值進行修改的。
而printf輸出的時候,只用到變數的值,不必在函數內改變變數的值。
如果是普通的函數參數傳遞,比如傳遞a,變數接收的方式是在函數內另外建立一個變數,假設是b,然後把a的值傳遞給b就可以了。這樣如果對b的值進行修改,不影響原來的a。
傳地址則可以通過操作改變實參的值,比如把a的地址p1傳遞到函數中,函數中p2接收到了a的地址,因為p2指向的是a的地址,所以對p2地址指向的內容修改,就對原來的變數a修改了
㈡ 為何在C語言中的scanf()中要用到取地址符,而printf()中卻不用
scanf意思是從鍵盤輸入數據,從鍵盤得到字元,放到某個變數里,當然要它的地址了;printf意思是輸入某個變數的內容,只要知道變數名就行了。我個人認為是不是為了符合人的思考習慣。
另外,c語言開發時就這么規定的,沒有太多的為什麼,當初人家發明c語言時說scanf需要加地址符,那咱們用的時候就得加,當初人家發明c語言時說scanf不需要加地址符,那咱們用的時候自然就不用加了。
㈢ 為什麼輸出函數不需要用取地址符&而輸入函數需要用取地址符&呢
因為輸入函數再給相應的數據類型輸入數值的需要找到其變數名對應分配的地址,再在地址上寫上數值。而輸出函數就不需要找到對應的地址書寫,直接通過變數名讀出相應的數值。。。
㈣ c語言 scanf();為什麼要用取地址符
scanf(「格式控制字元串」, 地址表列);
其中,格式控制字元串的作用與printf函數相同,但不能顯示非格式字元串,也就是不能顯示提示字元串。地址表列中給出各變數的地址。地址是由地址運算符「&」後跟變數名組成的。
例如:&a、&b分別表示變數a和變數b的地址。
這個地址就是編譯系統在內存中給a、b變數分配的地址。在C語言中,使用了地址這個概念,這是與其它語言不同的。 應該把變數的值和變數的地址這兩個不同的概念區別開來。變數的地址是C編譯系統分配的,用戶不必關心具體的地址是多少。
變數的地址和變數值的關系
在賦值表達式中給變數賦值,如:
a=567;
則,a為變數名,567是變數的值,&a是變數a的地址。
但在賦值號左邊是變數名,不能寫地址,而scanf函數在本質上也是給變數賦值,但要求寫變數的地址,如&a。這兩者在形式上是不同的。&是一個取地址運算符,&a是一個表達式,其功能是求變數的地址。
㈤ 輸入變數a要取地址,輸入字元串為什麼不用取地址
因為對於數組a[10],首地址就是a。這個a表示的就是數組的首地址,所以不用取地址了。