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的空間...