關於scanf函式,printf函式,變數和位址等好糾結的問題

時間 2022-02-26 13:50:10

1樓:匿名使用者

乙個變數對應兩個資料,這個你應該明白

乙個是你所儲存的資料,乙個是對應的記憶體位址scanf是對記憶體位址進行操作的,printf是對儲存的資料進行操作的

申請乙個變數,變數名就是資料,而對變數名&取位址就是對變數的記憶體位址進行操作

感覺你對p->num理解有問題吧

總體來說是對num變數進行操作,而num是哪乙個,就要有p來決定p是乙個指標

2樓:匿名使用者

printf裡面的a,a並不是位址,而是名稱,是助記符號,因為在編譯這個**之前,我們並不知道a的位址,所以使用變數名來助記符號。printf是通過第乙個引數來識別之後的引數列表,linux下可以通過man 3 printf來檢視printf更多的用法和規則。

printf("%d", a); //意思是將a代表的值以整數的方式列印出來

printf("%p", a); //意思是將a代表的值以指標位址的方式列印出來

printf("%p", &a); //意思是將&a代表的值以指標的方式列印出來

printf("%u", &a); //意思是將&a代表的值以無符號整數的方式列印出來

而scanf是將輸入的值儲存到位址裡面去

scanf("%d", &a); //意思是將輸入的值以整型的方式存放到&a代表的位址裡面去

scanf("%d", a); //如果a代表的值不是乙個有效的位址值,比如0,那麼程式就會奔潰,因為當程式將輸入的整型值寫入a代表的位址時,發現不是乙個有效的位址,作業系統就會終止程式,並退出。

更多scanf的用法,linux下可以通過man 3 scanf來檢視scanf的更多用法和規則。

這些函式的規則是由函式的實現來決定的,並不能憑空去猜測,遇到疑問,盡量檢視文件尋找答案,有助於知識的成長。共勉。

3樓:匿名使用者

你可以這麼理解,(當然可能不嚴謹),變數名就像代數裡的x,y,z這些的,它就代表乙個數。

而&a表示的是a的位址,另外如果p是乙個指標,*p表示的是p指向的東西。

c語言中scanf和printf都是輸出函式,兩者有什麼區別呢

4樓:匿名使用者

兩者完全不同,scanf是輸入函

數,printf是輸出函式,所以會經常同時出現。兩者也沒有可比性,需要弄清他們的概念。

1.scanf()是c語言中的乙個輸入函式。函式 scanf() 是從標準輸入流stdio (標準輸入裝置,一般指向鍵盤)中讀內容的通用子程式,可以說明的格式讀入多個字元,並儲存在對應位址的變數中。

比如:scanf("%d %d",&a,&b);

函式返回值為int型。如果a和b都被成功讀入,那麼scanf的返回值就是2;

如果只有a被成功讀入,返回值為1;

如果a和b都未被成功讀入,返回值為0;

如果遇到錯誤或遇到end of file,返回值為eof。end of file為ctrl+z 或者ctrl+d。

2.printf()函式是格式化輸出函式, 它是c語言中產生格式化輸出的函式(在 stdio.h 中定義)。

用於向終端(顯示器、控制台等)輸出字元。格式控制由要輸出的文字和資料格式說明組成。

printf 函式的一般形式為:

int printf(const char *format, [argument]);

format 引數是包含三種物件型別的乙個字串:

(1)無格式字元複製到輸出流;

(2)轉換規範,每個規範導致在值引數列表中檢索 1 個或更多個項;

(3)轉義序列。

[argument]包含需要輸出的資料,可以是常量(字元常量、數字常量、字串常量),變數,以及表示式。此處的資料應當與前面的format中的格式控制符一一對應(如果不對應會產生錯誤)。

例子:#include

int main()

5樓:何度千尋

在使用scanf和printf函式時要加上#include 。其中scanf()是格式輸入函式,printf()函式是格式化輸出函式。

其通常的用法如下:

#include

int main()

6樓:匿名使用者

scanf是格式化輸入。不是輸出。

7樓:懷緯疏雅靜

scanf是輸入函式

printf是輸出函式

關於scanf函式和printf函式的用法與區別(菜鳥級提問!!)

8樓:匿名使用者

1.區別:scanf與printf函式一樣,都被定義在標頭檔案stdio.

h裡,因此在使用scanf函式時要加上#include 。它是格式輸入函式,即按使用者指定的格式從鍵盤上把資料輸入到指定的變數之中。而printf()函式是格式化輸出函式, 一般用於向標準輸出裝置按規定格式輸出資訊。

2.scanf用法:int scanf(const char *format,...);

例子:#include

int main(void)

3.printf用法:extern void printf(const char *format,...);

例子:#include

int main()

9樓:極地373銀狼

...printf是輸出,scanf用來接使用者輸入,通過printf輸出

printf和scanf函式為什麼乙個要取位址符乙個不用呢?

10樓:蓴灬叔

因為scanf的取得乙個字元,然後把這個字元存放到某一記憶體區域,所以要為它(字元)分配儲存空間。

printf的輸出乙個字元。

輸出的時候系統根據變數名(外部識別符號)在記憶體中找到與之相匹配的字元進行輸出操作。所以不用取位址符。

11樓:匿名使用者

printf是輸出,不用...因為你呼叫它時已經把要輸出的資料用形參的方式傳送給它了

scanf是輸入,形參可以說是局變數,函式執行完後就沒了,傳了位址讓它儲存到指定位址,這樣資料就可儲存了!

12樓:匿名使用者

因為scanf函式要返回數值給變數,而printf函式不用返回值給變數

13樓:匿名使用者

你用scanf輸入的時候,是要在函式內對變數值進行修改的。

而printf輸出的時候,只用到變數的值,不必在函式內改變變數的值。

如果是普通的函式引數傳遞,比如傳遞a,變數接收的方式是在函式內另外建立乙個變數,假設是b,然後把a的值傳遞給b就可以了。這樣如果對b的值進行修改,不影響原來的a。

傳位址則可以通過操作改變實參的值,比如把a的位址p1傳遞到函式中,函式中p2接收到了a的位址,因為p2指向的是a的位址,所以對p2位址指向的內容修改,就對原來的變數a修改了

printf函式和scanf函式的格式說明都使用 字元開始。

14樓:匿名使用者

printf函式的原型為:

int printf(const char *format, ...);

呼叫格式為:

printf("《格式化字串》", 《參量表》);

函式 scanf()呼叫形式為:

scanf("《格式說明字串》",《變數位址》);

變數位址要求有效,並且與格式說明的次序一致。

下邊是乙個例子,你可以參考

#include

void main()

在c語言中scanf函式和printf函式具體怎麼用,還有這兩者的區別是什麼?

15樓:關於你

1.如scanf("%d",i)中只要前面是%d,後面i不管是什麼型別?都按指定的格式(整形)輸出?

2.如printf("%d",i)中i必須是前面規定的型別(整型)?

如果我直接printf(i)就不對?假設對的話,這個意思就是輸出變數名i?]

而printf("%d",i)就是輸出變數值的意思?

那麼第乙個"%d"就是幫助程式(或者格式化)獲取乙個需要的型別的值?

那麼第二個"%d"就是告訴計算機輸出的變數的值是個整形?

16樓:忘憂

scanf是輸入指令,printf是輸出

關於c語言的scanf函式的逗號問題

對於scanf 函式,如果格式控制串裡有逗號 或其他非格式符號 鍵盤輸入時,必須嚴格按照控制串的內容鍵入,不能隨意輸入。如scanf a d,b d a,b 響應輸入是a xx,b xx xx是整形數 scanf 函式還有一個特點較為常用,該函式會將白字元 空格 作為資料間的分隔符,比如scanf ...

關於C語言中Printf()函式中不太理解該函式什麼時候需要在尾句新增n

火車上的大象 n是把後面的輸出文字在下一行顯示 相當於word的回車鍵 零下一度的沙漠 什麼時候加 n這個就要看你的 怎麼寫了 你想printf a n printf b n printf c n 這麼寫都可以 主要看你個人想怎麼寫咯 沒那麼複雜。n 就是將游標轉到下一行,用它說白了也就是為了好看,...

c語言中gets函式和是scanf函式有什麼區別呢

一 指代不同 1 scanf 是c語言中的一個輸入函式。2 gets 從標準輸入裝置讀字串函式。二 讀取方式不同 1 scanf 是格式輸入函式,即按使用者指定的格式從鍵盤上把資料輸入到指定的變數之中。2 gets 可以無限讀取,不會判斷上限,以回車結束讀取,所以程式設計師應該確保buffer的空間...