1. 程式人生 > >C語言 資料型別輸入輸出函式(2018.11.17)

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、%

m.nf:指定輸出的資料佔m列,其中有n位小數。如果數值長度小於m,則左端補空格
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