常用的資料型別
基於32位作業系統:
void :宣告函式無返回值或無引數 (空型別) 1
char :字元型型別資料 1
int :整型資料 4
float :單精度浮點型資料 4
double :雙精度浮點型資料 8
short : 短整型資料 2
long : 長整型資料 4
long long : 長長整型資料 8
long double: 長雙精度浮點型資料 12
unsigned int: 無符號整型數 4
型別轉換
自動型別轉換:
在計算機運算的過程中,低精度的資料會自動向高精度的資料進製轉換,資料的精度不會丟失。
低 -》 高
1.char -> short -> int ->long -> float -> double -> …
2.同型別的資料,有符號的資料,比無符號的資料精度要高
100/3.0 -> int/float => float -> 33.333333
100/3 -> int/int => int -> 33
強制型別轉換:
有時候我們運算資料的時候為了精度更高,往往會利用短暫的強制型別轉換。
(對於強制型別轉換,在資料上是不推薦使用的,因為強制轉換,會使資料的精度丟失)
例如: 資料丟失的例子
float a = 3.14;
printf("%f\n",(int)a); //(int)a 強制型別轉換
強制轉換一般用於指標!!
int a=10086;
printf("&a:%p\n",&a); //&a -> int 型別
printf("&a->date:%d\n",((char )&a));
printf("&a+1->date:%d\n",(((char *)&a)+1));
運算子算術運算子,關係運算子,邏輯運算子,位運算子,賦值運算子
優先順序:高 - 》 低
陣列1.陣列名就是陣列的首位址 (陣列名就是位址!!)
2.陣列裡面的元素空間的連續的
3.陣列名就是首位址,用陣列名進行運算 + 或 - 是操作整個型別的大小
2.int a[3][3]=,,};//劃分成3塊,每塊賦值1 2 3
3.int a[3][3]=,,};//劃分成3塊,第一塊的第乙個值為1,其他為0.。
4.int a[3][3]=; //對二維陣列中的每乙個元素賦值
a[0][0]=1;
a[0][1]=2;
a[0][2]=3;
a[1][0]=4;
a[1][1]=5;
…a[2][2]=9;
5.帶預設方式賦值
int a[3]=; //分配的是36個空間剛好
int a[3]=;//分配24個空間,因為該型別為int [3]
//第乙個int [3] 存放 1 2 3
//第二個int [3] 存放 4 0 0
int a[3]=; //錯誤的,型別不能預設
2.((陣列名+下標1)+下標2)
指標作用:存放位址的資料型別
void * -> 4
char * -> 4
short * -> 4
int * -> 4
long * -> 4
int (*a)[10]; -> 4
void (*a)(void *); -> 4
為什麼指標的空間大小都是4個位元組???
因為指標是用來存放位址的,在32位的作業系統中,位址的最大值為 0xffff ffff
乙個空間位址可以存放乙個位元組的資料,位址的最大值為4個位元組,所以我們分配4個位址
空間就可以把32位的作業系統所有位址的存放起來!
為什麼需要型別???
1.因為指標在訪問資料的時候,需要偏移位址,去獲取下乙個目標的值,假設
不指定指標的型別,則會出現找不到下乙個目標的情況。
2.告訴系統,取多個位址作為完整的資料
指標的定義:
指標的型別 *變數名
例子: char *p=null; (注意:定義乙個指標出來就需要給他初始值,防止 「野指標」);
指標的型別:
void *a;//萬能指標,用他來先存放位址,以後轉換成需要的型別
char *a;//字串指標,指向字串
short *a; //短整型指標,指標乙個短整型
char **a; //二級指標,儲存char *指標的位址
char *a[10];//看優先順序,優先順序高,所以是乙個陣列,陣列中儲存了10個char *的指標
char (*a)[10];//先看優先順序 ()優先順序高,所以是乙個指標,指向char [10]的型別
void *a(void *arg); //函式,返回值為void * 引數也為void *
void *(*a)(void *arg);//(*a)優先順序高,所以是函式指標 ,指向返回值為void * 引數也為void *的函式
c 語言基礎總結
1.strlen和sizeof區別?因為sizeof值在編譯時確定,所以不能用來得到動態分配 執行時分配 儲存空間的大小。sizeof type sizeof expr 2.陣列和指標 使用陣列的時候編譯器會把他轉換為指標。因此在一些情況下陣列的操作實際是指標的操作。使用陣列作為auto變數的初始值...
C語言基礎總結
本文為c語言基礎知識的總結,並非教程,適合有基礎的猿們進行複習之用。1 static 靜態 變數有什麼作用?static全域性變數和普通全域性變數相比的區別在於static全域性變數只初始化一次,這樣做的目的是為了防止在其他檔案單元中被引用 static區域性變數和普通區域性變數的區別是static...
C語言基礎總結1
c語言基礎資料型別 int 4位元組 記憶體 short 2位元組 記憶體 char 1位元組 記憶體 float 4位元組 記憶體 定義變數 int a 5 int b 3 int c a b 表示式是由,變數,常量,運算子組成的有結果的式子。如 上面的 c a b c語言中的輸入和輸出 scan...