c語言中格式控制符的作用
c語言中的強制型別轉換
c語言基礎型別包含有char,int, float, double等,顯而易見,不同型別的變數所佔的記憶體空間不同,然而當我們對這些不同資料型別進行位制轉換,那麼會發生什麼呢?
為了更好的理解在位置轉換,我們首先看乙個例子
#include
intmain
(int argc,
char
* ar**)
q:如何獲取c語言中常量的型別(在記憶體中的儲存形式)
或者c語言中的常量都是什麼資料型別呢?
看下面的例子
printf
("%f\n",5
);//常量5是什麼型別呢?在記憶體中占用了幾個位元組呢?
printf
("%f\n"
,5.01);
//常量5.01是什麼型別呢?在記憶體中占用了幾個位元組呢?
常量5是什麼型別呢?在記憶體中占用了幾個位元組呢?
常量5.01是什麼型別呢?在記憶體中占用了幾個位元組呢?
c語言中的常量型別可以通過sizeof來獲取
注意:sizeof函式返回值型別為long int
// sizeof函式的使用
int a =5;
printf
("%ld\n"
,sizeof
(int))
;// sizeof入口引數可以是型別名
printf
("%ld\n"
,sizeof
(a))
;// sizeof入口引數可以是變數名
printf
("%ld\n"
,sizeof(5
));// sizeof入口引數可以是常量
q: c語言中的格式控制符的本質分析
格式控制符主要用於printf語句和檔案的操作
注意:c語言中的每個格式控制符均與特定的資料型別相對應,而這一切的本質均要從記憶體的角度去分析c語言中int和float型別均為4個位元組,而double型別為8個位元組
在printf語句中,float會自動轉換成double,也就是,%f會從記憶體中讀取八個位元組的內容
%d => int 對應從記憶體中讀取四個位元組的資料
%f => double (float自動轉換為double型別) 對應從記憶體中讀取八個位元組的資料
%…例項1如下:
printf
("%f\n",5
);
分析如下:
引數5為int型,因此在記憶體中只占用四個位元組,
然而%f使得printf語句從記憶體中讀取八個位元組的資料。
顯然,記憶體訪問越界,會有不可預料的情況發生。
例項2如下:
printf
("%ld\n"
,sizeof
(5.01))
;
分析如下:
引數5.01為double型,因此在記憶體中占用八個位元組,
然而%d使得printf語句從記憶體中僅僅讀取四個位元組的資料。
顯然,記憶體訪問不正確,同樣會有不可預料的情況發生。
q1:具體分析 「int i = 5.01;」將double型常量賦值給int型變數過程中會發生型別的強制轉換
資料型別在強制轉換過程中會發生什麼?
C語言 十進位制十六進製制轉換
乙個朋友提到十進位制數轉十六進製制後以字串輸出,基於此寫了兩段 以供參考,其中涉及陣列成員反轉,指標等特別基礎的用法。僅娛樂。include stdio.h include string.h include stdlib.h include limits.h define max size 100i...
C 語言十進位制和十六進製制的轉換
設計字串的拂去,字串的遍歷,還有ascii 碼。十進位制和十六進製制轉換的相關知識。1 十六進製制轉化為10 進製 include include include 返回ch字元在sign陣列中的序號 int getindexofsigns char ch int main int sum 0,t 0...
c語言二進位制數表示 C語言位操作
了解位的基本概念 熟悉二進位制數的運算方法 掌握各種位運算的方法和技巧 熟悉位段的基本概念 掌握位段中資料的引用方法 掌握數值的轉換方法和技巧 c語言區別於其他語言的重要特點是支援位運算,使其能夠完成組合語言所能完成的大部分功能。在實際的程式設計中借助與位運算往往可以設計出簡潔的演算法,使程式簡化,...