C語言 資料型別輸入輸出函式(2018.11.17)
基本資料型別
5個方式瞭解基本型別
1、符號
2、位元組數
3、資料範圍
4、表示方法
5、運算方法
記憶體空間分配給變數,不是型別
指標型別:指標變臉中只能存放地址
空型別:主要用於資料型別的轉換和定義函式型別
void指標是萬用指標,萬用=無用,多數用於型別轉換後使用
限定性流程轉向,呼叫、返回函式。函式只能返回一個值。輸入輸出引數能使函式返回多於一個值。
‘/0’與NULL的值都等於0
typedef 重新制定宣告變數型別
printf()
由標頭檔案 stdio.h 宣告。
std 標準庫
i 輸入
o 輸出
格式控制符
1、%d。按10進位制整型資料的實際長度輸出。
2、%md。如果資料的位數小於m,則左端補以空格,若大於嗎,則按實際位數輸出。
3、%ld。輸出長整型資料。
4、%o。以八進位制整數形式輸出。
5、%c。輸出一個字元
6、%s。輸出字串
%ms:輸出的字串佔m列。若字串小於m,向左補空格。大於m,全部輸出。
%-ms:如果字串小於m,則右補空格。
%m.ns:輸出佔m列,但只取字串中左端n個字元。這n個字元輸出在m列的右側,左補空格
%-m.ns:輸出佔m列,但只取字串中左端n個字元。這n個字元輸出在m列的右側,右補空格
7、%
8、%x,%X:十六進位制無符號整型 【%x:ff,%X:FF】
9、%e,%E 指數形式浮點小數。【%e:5.67e+02,%E:5.67E+02】
10、%-:輸出資料在域內左對齊。
11、%+:指定在有符號型別的正數前有正號“+”
12、%#:在八、十六進位制數顯示0,0x。
13、%0:輸出數值是指定左邊不使用的空位補0。
scanf()
鍵盤輸入 ------->緩衝區 -------> scanf在緩衝區取數值
scanf輸入會產生輸入垃圾
用getchar()取一個字元,可以取走輸入垃圾‘/n’或者‘空格’
fflush:清空輸入緩衝區
格式控制符
%k:短整型
%m:指定輸入資料所佔寬度【不能針對精度】
%*:賦值抑制符【消除輸入垃圾】【檔案操作用得比較多】
eg:
scanf(%d%*d%d,&a,&b);
scanf不能輸入帶空格的字串
gets,只認回車為結束符號,可以輸入帶空格的字串。
一般變數初始化:
預設初始化:1、全域性變數,靜態變數【存放全域性/靜態區,值為0,若是字串,為空】
2、區域性變數【動態資料區,值為隨機值】
人工初始化:
1、數值變數
2、字元變數
3、指標變數【當指標變數不確定時,*p = NULL【防止野指標】】
4、陣列
auto【預設】動態變數
static 靜態變數
register 外部變數
extern 宣告變數
static+全域性變數:只能當前檔案可以使用【防止檔案與檔案裡同名的函式定義錯誤】
區域性靜態變數:存在不可見,僅限在本函式裡用,多數用於保留上次呼叫函式時計算的值
全域性變數:全部可以使用
register【暫存器變數】:1、只能是基本型別int
2、不能取地址
3、不能定義成靜態變數
eg
10個暫存器,定義了15個,有5個還是在記憶體中
const 只讀變數
const int *a;int const *a;
一個指向const int 型的指標
*a不可以修改
a可以改寫
int *const a;【a需要初始化】
a是指向int 的const指標,*a可以改寫,a不可以
int const *const a
都不可以改寫
volatile【多用於arm】
限制優化,不可以被優化
結構體
struct node
{
char a;
short b;
char c;
struct node *p;【這裡的結構體指標變數只能指向自己】
}std;
引用形式:結構體變數名.成員名
或者 p = &std;p -> a; (*p).a
記憶體空洞
字對齊、半字對齊。
struct node
{char ch;
int num;
}; 變數佔8個位元組//字對齊 4+4 =8
struct node
{char ch;
short num;
char ch1;
short b;
}; 變數佔8個位元組 //半字對齊,2+2+2+2 = 8
struct node
{char ch;
char ch1;
char ch2
}; 變數佔3個位元組
struct node
{char ch; // 4
int num; //4
char ch1; //ch1+ch2=4
char ch2;
double c; //8
char ch3; //ch3 +short =4
short b;
}; 變數佔24個位元組 //4*4+8=24
共用體union
可以把一個整型變數、一個字元型變數、一個實型變數放在同一個地址開始的記憶體單元中。即使幾個不同的變數共佔同一段記憶體空間。
union node
{ char ch[7];
int num;
}; 佔8位元組!//分配空間字對齊!4的整數倍
大端位元組序:資料高位寫在低位記憶體地址
小段位元組序:資料低位寫在高位記憶體地址
列舉型別
列舉型別宣告代表常量的符號名稱。
enum的預設值
enum kids{nippy, slats, skippy, nina ,liz};
enum的指定值
enum levels {low=100,medium=500,high=2000};
define 巨集定義
定義常量與命令(避免幻數)
#define