C語言基礎總結

2021-09-11 05:19:56 字數 2494 閱讀 8383

常用的資料型別

基於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...