(C語言中printf函式讀取的具體分析)
(C語言中printf函式讀取的具體分析)
不多說,直接上。printf函式將傳入的資料傳送到記憶體堆區(緩衝區),然後再根據前面的(格式說明符一個個讀取,這樣會造成錯誤)
#include<stdio.h>
#include<limits.h>
#include<float.h>
int main(void)
{
float n1 = 1.342;
double n2 = 3.145;
int n3 = 4321 ,n4 = 1234;
printf("%ld %ld %ld %ld",n1,n2,n3, n4);
}
結果是
n3,n4本是浮點型,結果卻輸出的值卻是n1呢
的值。這是因為堆空間。
printf 函式在取出來堆空間裡的函式值時,在取的時候,先把n1,n2 取出,(float 雖然為4位元組,但在處理過程中c編譯器把它看作8位元組),二者雖然為float,double 型別,但是取出的時候是%ld 四位元組出去的。所以n1 取到n4的值,n2 取得n1的值, n3取得n2前四位元組的值,n4取得n2後四位元組的值。
相關推薦
(C語言中printf函式讀取的具體分析)
(C語言中printf函式讀取的具體分析) 不多說,直接上。printf函式將傳入的資料傳送到記憶體堆區(緩衝區),然後再根據前面的(格式說明符一個個讀取,這樣會造成錯誤) #include<stdio.h> #include<limits.h> #incl
關於C語言中printf函式“輸出歧視”的問題
目錄 關於C語言中printf函式“輸出歧視”的問題 問題描述 探索問題原因 另一種研究方法 問題結論 關於C語言中printf函式“輸出歧視”的問題 問題描述 昨天晚上被問到一個問題,為什麼在同一個printf函式中兩次輸出一個double型變
c語言中printf函式列印char型變數0xFF,輸出為0xFFFFFFFF的解決方法
問題描述:在編寫udp程式解析資料的時候,發現接收的char型變數為0xFF,但是使用printf後列印為0xFFFFFFFF,除錯程式查詢原因後發現使用char時,對於printf來說其值為0xFFFFFFFF。原因是%x要求的是無符號整形變數,你傳入的是char型,這裡有
關於C語言中printf函式的引數執行順序
RT...看到有類似的題目,說是從右到左,, 藍後在VS2012中寫了如下的程式碼...但是執行出來的結果如下,, 這是為啥... 留一疑惑在這先. ok,這裡有了一個解釋: i++會建立一個拷貝 %d取值輸出,引數的傳遞是從右到左壓入棧,所以從右邊開始,i++,此時拷貝
C語言中printf函式對多個引數的計算順序和輸出順序
例: [cpp] view plain copy print?#include<stdio.h> void main() { int i=2; printf(”%d,%d,%d,%d,\n”,i++,++i,i,i++); printf(”%d\n”,
語法:C語言中printf函式的返回值
平時真不怎麼關注printf的返回值,一般是直接呼叫printf格式化輸出,今天做騰訊的筆試題發現了一個知識漏洞,特此記錄。 首先,題目是這樣的: int f(int a, int b, int c) { return 0; } int main()
C語言中printf和scanf函式基本的引數型別和輸出形式
printf函式的引數型別和輸出形式 字元 引數型別 輸出形式 d,i int 十進位制數 o int 無符號八進位制數(不含前導0) x,X int 無符號十六進位制數(沒有前
c語言中 gotoxy() 函式的使用
轉自 https://blog.csdn.net/radjedef/article/details/79028329 #include <stdio.h> #include <windows.h> void gotoxy(int x, int y) {
c語言中rand()函式的用法筆記
最近在學著用c寫一些小程式,過程中遇到很多問題,在網上查很多大神的講解,以及查閱vs2010的幫助文件。在此做個筆記,以便今後查閱,備忘。感謝無私奉獻講解的大神們! 一、rand() rand()函式用來產生隨機數,但是,rand()的內部實現是用線性同餘法實現的,是偽隨機數,由於週期較長,
C語言中main函式引數使用
在C99標準中定義main函式兩種正確的寫法 int main(void); int main(int argc, char* argv[]); 常見的不標準寫法 void main() main()
C語言中strlen函式的模擬實現n種方法
strlen 函式採用遞迴形式編寫 # include <stdio.h> # include <stdlib.h> int strlen (char* num) // 形參接受實參傳遞的陣列 {
C語言中printf(),sprintf(),scanf(),sscanf()的用法和區別
printf 語法: #include <stdio.h> int printf( const char *format, ... ); printf()函式根據format(格式)給出的格式列印輸出到STDOUT(標準輸出)和其它引數中。返
C語言中scanf函式輸入回車符的問題
在用c語言編寫輸入語句的時候常用到scanf函式,初學者在剛用scanf函式輸入時,經常會遇到各種各樣的輸入錯誤,最重要的是一定要記住scanf函式的輸入格式,scanf函式裡包含了哪些東西,輸入的時候就必須有哪些東西,比如:scanf("%c%c%c"),那麼輸入的時
C語言中,函式指標陣列的用途:轉移表
計算器的實現: 方法一: #include <stdio.h> int add(int a, int b) { return a + b; } int sub(int a, int b)
C語言中 main 函式的引數 argc&argv
argc、argv用命令列編譯時有用 argc:整數 srgv:二維陣列、指標的指標、指標陣列 例子 #include<stdio.h> #include<stdlib.h> int main(int argc, char** argv) { i
c語言中get()函式的原理及返回值
首先要記住的一句話就是Never use gets(). 這是因為gets()函式不檢查目標陣列是否能夠容納輸入,而若想把一個字串讀到程式中,最先要做的事情就是預留儲存字串的空間。所以這很容易導致分配的空間不夠大而陣列越界,然而gets()函式並不檢查這個方面,所以導致的結
C語言中assert函式的用法
2)每個assert只檢驗一個條件,因為同時檢驗多個條件時,如果斷言失敗,無法直觀的判斷是哪個條件失敗 不好: assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize); 好: assert(nOffset >
c語言中getchar()函式一個常見Error
getchar() 從這個名字來看應該是 得到一個字元。 正好C語言裡面有一個char型別, 很容易就出現瞭如下程式: # include <stdio.h> int main (voi
c語言中signal函式詳細解釋說明
對於 訊號處理函式 位於 <signal.h> 中.void ( *signal( int sig, void (* handler)( int ))) ( int );這個函式的宣告很是嚇人, 一看就難弄懂. 下面是解釋用法.一步一步解釋:int (*p)();這是一個函式指標, p所指向的函
C語言中fopen函式用法詳解
fopen函式用來開啟一個檔案,其呼叫的一般形式為:檔案指標名=fopen(檔名,使用檔案方式); 其中,“檔案指標名”必須是被說明為FILE 型別的指標變數;“檔名”被開啟檔案的檔名,是字串常量或字串陣列,要求是全路徑;“使用檔案方式”是指檔案的型別和操作要求。 檔案使用方