C 基礎知識

2021-06-07 12:38:50 字數 2481 閱讀 2863

主要內容:

回顧c語言的基本元素識別符號、關鍵字、資料型別、常量、變數、結構體、共用體、列舉、運算子、表示式、語句

掌握程式的基本結構

關於資料型別:

資料型別決定:

1. 佔記憶體大小

2. 記憶體中的布局

3. 資料的行為

關於常量:

在程式執行過程中,其值保持不變的量叫常量。按所屬資料型別分四種常量:整型常量 實型常量 字元型常量 字串常量

實型常量,也稱浮點數 表示方式一般有兩種:

十進位制形式:必須含有小數點 比如0.123 ,3.5

指數形式::(e或e之前必須有數字,指數必須為整數)如:12.3e3 ,123e2, 1.23e4。錯誤的寫法:e-5 ,1.2e-3.5,e3。

實型常量預設是double的  。浮點數一般不是精確顯示所以比較大小的時候一般 (f-2.6)>-1e-6 && (f-2.6)<1e-6 直接寫成 f==2.6f是不對的

字串常量是由 " "雙引號括起來的,並且最後一位是'\0'. 用空格隔開的連續的字串被視為乙個串。比如char str[ ] = "hello" "yaphets"; str = "helloyaphets"

使用const而不是巨集來定義常量的好處:

1、const定義的常量編譯器可以對其進行資料型別安全檢查,而#define巨集定義的常量卻只是進行簡單的字元替換,且有時還會產生邊際效應(不如你願)。所謂邊際效應舉例如下:#define n 100#define m 200 + n當程式中使用n*m 時,原本想要100 * (200+ n )的卻變成了100 * 200 + n 。

2、有些除錯程式可對const進行除錯,但不對#define進行除錯。

3、當定義區域性常量時,const作用域僅限於定義區域性常量的函式體內。但用#define時其作用域不僅限於定義區域性常量的函式體內,而是從定義點到整個程式的結束點。

關於變數

變數運算中的隱式型別轉換

什麼情況下發生?

運算轉換:不同型別資料混合運算時。規則:不同型別資料運算時先自動轉換成同一型別。規則是由低到高、簡單到複雜。

賦值轉換:把乙個值賦給與其型別不同的變數時。右服從左。float f = 1.0;int* p = malloc(sizeof(int));

函式呼叫:實參與形參型別不一致時轉換,實參服從形參。

函式返回:服從返回值。

變數運算中的強制型別轉換,強制轉換得到所需型別的中間變數,原變數型別不變。

變數的定義和宣告

變數宣告:告訴編譯器變數的型別、儲存型別,不分配儲存空間。extern int i;

變數定義:告訴編譯器在此處分配儲存空間建立變數。int i= 1;

同一變數定義只能一次,但是可以宣告多次。

關於結構體

多個的資料組合成的乙個整體,它是一種構造資料型別。

結構體變數訪問方式:

1. 結構體變數名.成員名

2. 指向結構體變數的指標->成員名 pstu1->*** = 'm『;//第二種

3. (*指向結構體變數的指標).成員名 (*pstu1).*** = 『m『;//第三種

特點:可以對結構體變數整體初始化;

可以將乙個結構體變數整體賦值給另乙個結構體變數。

可以對整個結構體變數或各成員取位址;

不可以在定義結構體型別時讓成員帶有初值。

不可以判斷兩個結構體變數是否相等;

關於列舉的好處:

int i;

enum solution ;//列舉常量a,b,c,d代表四種不同的解決方案

enum solution ;//當需要增加解決方案時,for迴圈次數自動調整

for(i= 0;i

關於共用體union

共用體與結構體不同之處在於:

共用體變數中各成員項共同使用同一儲存空間

乙個共用體變數所佔記憶體單元數為其成員中占用記憶體單元最長者的長度。

關於運算子優先順序

++   --和sizeof的優先順序要高於四則運算並且是從右向左的,比間址運算*也要高

關於typedef

用自定義名字為已有資料型別命名。

型別定義一般形式:typedef 原有型別 新別名;

typedef沒有創造新資料型別。typedef是定義型別別名,不能定義變數。typedef與define 不同。define 預處理時處理,簡單字元置換。typedef編譯時處理,為已有型別命名。

比如下面兩種情況顯然是不一樣的

#define pint int *

pint p1,p2;

typedef int * pint;

pint p1,p2;

經常用於重定義strut和union等可以簡化**

typedefstruct student

stu;

stu stu1; // struct student stu1;

typedefstruct student

stu,*pstu;

這個例子中定義了兩個別名,這個技巧經常在標頭檔案中使用

C 基礎知識

抽象類 abstract class 一種不可以被例項化的類。抽象類中一般含有抽象方法,當然也可有具體實現。繼承類只有實現過所有抽象類的抽象方法後才能被例項化。介面 inte ce 只含有共有抽象方法 public abstract method 的類。這些方法必須在子類中被實現。反射 程式集包含模...

c 基礎知識

或運算的意義是什麼 0 0 0 0 1 1 1 0 1 1 1 1 無進製與運算的意義是什麼 在vc中,視窗的每個屬性對應乙個只有一位為1的16位的二進位制數,當增加某屬性做或運算 即可,取消某個屬性只需與 上這個屬性的取反。cs.style ws maximizebox 和cs.style cs....

C 基礎知識

1 malloc和new區別與聯絡 a malloc malloc為函式,需要標頭檔案,申請的無型別,需要強制轉換 free釋放。示例 char p char malloc 10 sizeof char free p b new new是運算子,不需要標頭檔案,申請的是有型別的,自動呼叫建構函式 d...