1. 程式人生 > >C語言重要常用知識點梳理

C語言重要常用知識點梳理

知識點1:交換兩個變數值的方法
  • 採用第三方變數(最容易想到的方法)

  • 採用加減法進行值得交換(面試時常用**)

程式碼如下:

b = a - b;
a = a - b;
b = a + b;
  • 採用按位異或的位方式

程式碼如下:

a = a^b;
b = a^b;
a = a^b;
知識點2:取餘運算%的結果與被除的符號相同結果為兩個正數取餘後前面加符號知識點3:sizeof的使用
  • sizeof是一種運算子不要想當然理解為函式
  • sizeof使用時可以不加()
  • sizeof可以加變數、常量、資料型別
  • 跟資料型別是必須加()
知識點4:#include編譯預處理命令與多檔案團隊開發
  • include編譯預處理命令可以認為是:將後面的檔案內容拷貝到當前的檔案中
  • 多檔案團隊開發:模組分別編譯成.o都不能連結成功,合起來連結生成最終程式。
  • 連結:把專案中所有相關聯的.o目標檔案、C語言函式庫合併在一起,生成可執行檔案

——函式的定義放.c檔案,函式的宣告放.h檔案

——如果要使用某個.c檔案中定義的函式,只需要#include這個.c檔案對應的.h檔案

——h檔案的作用:被別人拷貝。編譯連結的時候不需要管.h檔案

知識點5:陣列的幾種初始化方式如下:
int a[3] = {10, 9, 6};
int a[3] = {10,9};
int a[] = {11, 7, 6};
int a[4] = {[1]=11,[0] = 7};(知道有此種初始化方式即可)
知識點6:陣列的記憶體分析和注意點
  • 儲存空間的劃分(記憶體的分配是從高地址到低地址進行的,但一個數組內部元素又是從低到高進行的)【注:對於以後學習重要】
  • 陣列名的作用,檢視元素地址
  • 注意陣列不要越界
知識點7:字串知識點
  • "123”其實是由’1’、’2’、’3’、’\0’組成
  • 字串的輸出”%s”,’\0’是不會輸出的
知識點8 : 字串處理函式:strlen()
  • 計算的是字元數,不是字數
  • 計算的字元不包括’\0’,一個漢字相當於3個字元

    例子:"哈haha" 字元數為7

  • 從某個地址開始的數字符個數,知道遇到’\0’為止

指標部分在C語言中佔據重要地位,所以重點學習與整理了指標的知識:

知識點9:指標定義的格式
變數型別 *變數名

如Int *p
知識點10:指標作用

能夠根據一個地址值,訪問對應的儲存空間

例:

Int *p;
Int a = 90;
P = &a;
*p = 10;//把10賦值給p所指的儲存空間
知識點11:指標使用注意
  • Int *p只能指向int型別的資料
  • 指標變數只能儲存地址
  • 指標變數未經初始化不要拿來間接訪問其他儲存空間
知識點12:指標與陣列
  • 遍歷陣列
int ages[5]={10,4,9,44,99};for(int i =0; i<5; i++){

    printf("%d\n", ages[i]);}
  • 使用指標遍歷陣列:
int*p;// 指標變數P指向了陣列的首地址

    p =&ages[0];// 使用指標遍歷陣列for(int i =0; i<5; I++){

        printf("ages[%d] = %d\n", i,*(p + i));}
  • 注:指標+ 1取決於指標的型別
  • 注:陣列的訪問方式

——陣列名[下標]

——指標變數名[下標]

——*(p + i)

知識點13:指標與字串
  • 定義字串的兩種方式

——利用陣列

Char name[]=Andyzhao

特點:字串裡的字元可以修改

適用場合:字串內容需要經常修改

——利用指標

Char*name =itcast

特點:字串是一個常量,字串裡面的字元不能修改

使用場合:字串的內容不需要修改,而這個字串經常使用

知識點13:預處理指令(三種):
  • 巨集定義
  • 條件編譯
  • 檔案包含
  • 巨集定義的配對使用和帶引數的巨集
#  define...# undef

帶引數的巨集

# define sum(v1,v2) ((v1) + (v2))//括號是必須的

例如:

#define pingfang(a) a*a

#define pingfang(a)(a*a)

呼叫時

pingfang(10)/pingfang(2)//不正確

pingfang(5+5)//不正確帶引數的巨集效率比函式高
  • 條件編譯(一般是判斷巨集的值)
#if 條件...#elif條件...#else...#endif(非常重要)不然後面的程式碼全部無效
  • 檔案包含

—— <>表示系統自帶的檔案,""表示自定義檔案

—— 不允許迴圈包含,比如a.h包含b.h,b.h又包含a.h

知識點14:typedef 只是給型別起了個別名並不是定義新型別
structStudent{int age;char*name;};typedefstructStudentStudent;等價於typedefstructStudent{int age;char*name;}Student;也等價於typedefstruct{int age;char*name;}Student;
  • 類似的給列舉型別起名
typedefenumSex{Man,Women}Sex;
  • 下面這種情況的寫法比較特殊

//下面是函式指標型別的自定義資料型別,返回值型別和引數型別要匹配

#includetypedefint(*TypeFuncPointer)(int,int);int add(int a, intb){return a + b;}int minus(int a, intb){return a - b;}int main(){TypeFuncPointer p = add;//使用自定義型別ÎTypeFuncPointer p2 = minus;//使用自定義型別Î

    printf("add = %d\n",p(1,2));

    printf("minus = %d\n",p2(1,2));return0;}
  • 下面是定義結構體的指標型別
typedefstructStudent{int age;char*name;}*PtrStu;//使用方式Student stu ={18,"zhangsan"};PtrStu p =&stu;
  • 巨集定義也是可以為型別起名的
#defineIntegerint相當於typedefintInteger
  • 注意和typedef的區別

例如:

typedefchar*String#defineString2char*
知識點15:static和 extern區別是能否進行跨檔案訪問

①.函式

②.變數

對函式的作用

  • 外部函式:定義的函式能被本檔案和其他檔案訪問
  • 內部函式;定義的函式只能被本檔案訪問

預設情況下,所有函式都是外部函式(相當於帶關鍵字extern),所以可以省略extern作用:

完整的定義和引用一個外部函式都加extern

引用時也是預設是外部函式所以也省略extern

static作用:定義一個內部函式

使用:static返回型別函式名(引數列表)

不能被其他檔案呼叫

一個專案中,本檔案的外部函式名不能和其他檔案的外部函式同名(error)

本檔案中的內部函式(static)可以和其他檔案的函式名同名的

對變數的作用:

全域性變數分為兩種:

外部變數:定義的變數可以被其他檔案訪問

①.預設情況下所有的全域性變數都是外部變數
②.不同檔案中的同名外部變數都代表同一個
③.定義一個外部變數不加extern,宣告才加extern

同樣的宣告是沒有錯誤的

內部變數:定義的變數不能被其他檔案訪問

不同檔案的同名內部變數互不影響

相關推薦

C語言重要常用知識點梳理

知識點1:交換兩個變數值的方法 採用第三方變數(最容易想到的方法) 採用加減法進行值得交換(面試時常用**)程式碼如下: b = a - b; a = a - b; b = a + b; 採用按位異或的位方式程式碼如下: a = a^b; b = a^b; a = a^b

C語言重要知識點回顧

太久沒有看C語言相關知識了,開始要整理回顧一些重點知識點啦,因為各大公司筆試還是有許多C語言相關的題,做個複習。 const 關鍵字與指標修飾使用 普通指標使用: //普通指標使用,我們通過 i 或者 p 指標都能改變變數值 void test1() { int i =

C語言重要知識點

C語言最重要的知識點 總體上必須清楚的:  1)程式結構是三種:  順序結構 、選擇結構(分支結構)、迴圈結構。  2)讀程式都要從main()入口, 然後從最上面順序往下讀(碰到迴圈做迴圈,碰到選擇

C語言重要概念匯總

parent 結束 操作系統 字符 靜態 有一個 靜態區 進制 會有 作者:郭孝星 微博:郭孝星的新浪微博 郵箱:[email protected]/* */ 博客:http://blog.csdn.net/allenwells Gi

C#語言常用的判斷語句和循環語句

只讀 代碼示例 賦值 循環 數字 其他 do while 表達 集合 C#語言中,我們常用的判斷語句和循環語句都有哪些呢? 1、if判斷 代碼格式:if(條件1){  代碼1 }else if(條件2){  代碼2

C語言實現常用數據結構——棧

pre sta printf \n all pri oid isp return #include<stdio.h> #include<stdlib.h> //用鏈表實現棧 typedef struct Node { int data;

C語言總結的知識點

對程式設計的理解:對資料的操作 內容:資料型別及對應的內容:運算子:程式結構: 修飾符:函式儲存結構:記憶體管理: Gcc編譯: ++++++++++++++++資料型別及對應內容++++++++++++++++基本資料型別:原子資料型別是最小資料單元: 空型別:是所有資料型別的基礎。 構造資料型

c語言 解析常用字元操作函式

       在c語言中有很多的字元操作函式,而我們經常用到的字元操作函式有strcpy ,strncpy ,strcat ,strcmp ,strlen ,strlwr ,strupr ,gets ,puts ,等等很多很多。    

c語言實現常用排序演算法

#include <stdio.h> #include <stdlib.h> #define arrLen(arr) sizeof(arr)/sizeof(arr[0]) void print(int arr[], int len) { int i = 0; fo

C語言字串查詢知識點搬運

1.  標頭檔案:#include <string.h> strchr() 用來查詢某字元在字串中首次出現的位置,其原型為:     char * strchr (const char *str, int c); 【引數】str 為要查詢的字串,

C語言常用函式筆記

標頭檔案:string.h 1.void strcmp(const char *str1,char *str2) 作用:比較str1,str2兩字串大小(比較二者是否相同) 若str1=str2,則返回0;    //兩字串相同若str1<str2,則返回負值

C語言中一些知識點

  1.學程式設計:找程式碼,讀程式碼,改程式碼,寫程式碼;少看書。但少看不是不看,看一本書要限制在一天內。任務是通讀書中主要的概念,明白大致是幹什麼用的,形成一個大概的框架;然後一週內幹掉書中全部程式碼,程式碼不理解再瀏覽書中相關章節,注意是瀏覽。或者刷部落格。程式碼實在刷不懂,可以先刷後面,待

C語言字串常用處理技巧總結

1.從一串字串中提取中間一段,並單獨拿出來 char *pStart = NULL,*pMid = NULL,*pEnd = NULL,*t = NULL; pStart= strstr(pStart, "A"); pEnd = strstr(pStart, "

C語言常用排序演算法(氣泡排序、選擇排序、插入排序、希爾排序、快速排序、堆排序)實現比較

以下程式在win10 X64位作業系統,使用VS2017執行驗證可行 排序是非常重要且很常用的一種操作,有氣泡排序、選擇排序、插入排序、希爾排序、快速排序、堆排序等多種方法。 例項1 冒泡法排序 1.前言: 陣列中有N個整數,用冒泡法將它們從小到大(或從大到小)排序。冒泡法

(轉載)C語言常用的幾個標頭檔案及庫函式 (stdio.h ,string.h ,math.h ,stdlib.h)

不完全統計,C語言標準庫中的標頭檔案有15個之多,所以我主要介紹常用的這四個標頭檔案stdio.h ,string.h ,math.h ,stdlib.h ,以後用到其他的再做補充。下面上乾貨: 1.<stdio.h>:定義了輸入輸出函式、型別以及巨集,函式

【linux CC語言常用的幾個函式的總結【一】

1、memset函式 定義變數時一定要進行初始化,尤其是陣列和結構體這種佔用記憶體大的資料結構。在使用陣列的時候經常因為沒有初始化而產生“燙燙燙燙燙燙”這樣的野值,俗稱“亂碼”。每種型別的變數都有各自的初始化方法,memset() 函式可以說是初始化記憶體的“萬能函式”,通常為新申請的記憶體進行初始化工作。

【linux CC語言常用的幾個函數的總結【一】

有效 getchar() 調用 指向 ++ 再次 無法 linux c 收回 1、memset函數 定義變量時一定要進行初始化,尤其是數組和結構體這種占用內存大的數據結構。在使用數組的時候經常因為沒有初始化而產生“燙燙燙燙燙燙”這樣的野值,俗稱“亂碼”。每種類型的變量都有各

【linux CC語言常用的幾個函式的總結【二】

3、fgets 雖然用 gets() 時有空格也可以直接輸入,但是 gets() 有一個非常大的缺陷,即它不檢查預留儲存區是否能夠容納實際輸入的資料,換句話說,如果輸入的字元數目大於陣列的長度,gets 無法檢測到這個問題,就會發生記憶體越界,所以程式設計時建議使用 fgets()。fgets() 的原型為

C語言------五大常用演算法總結

引言 據說有人歸納了計算機的五大常用演算法,它們是貪婪演算法,動態規劃演算法,分治演算法,回溯演算法以及分支限界演算法。雖然不知道為何要將這五個演算法歸為最常用的演算法,但是毫無疑問,這五個演算法是有很多應用場景的,最優化問題大多可以利用這些演算法解決。演算法的本質

c語言陣列部分知識點總結

對於陣列部分知識點的學習,主要需要掌握:計算平均分、最高分、成績排序與查詢等等,主要向函式傳遞一維陣列和二維陣列的方法。還學習陣列型別、陣列的定義和初始化,以及對陣列名特殊含義的理解。 1.陣列元素定義初為a[0](一個代表下標個數為1) 2.c語言中陣列的下標都是從0開始的。 3.最好把幻