C語言重要常用知識點梳理
-
採用第三方變數(最容易想到的方法)
- 採用加減法進行值得交換(面試時常用**)
程式碼如下:
b = a - b;
a = a - b;
b = a + b;
- 採用按位異或的位方式
程式碼如下:
a = a^b;
b = a^b;
a = a^b;
知識點2:取餘運算%的結果與被除的符號相同結果為兩個正數取餘後前面加符號知識點3:sizeof的使用
- sizeof是一種運算子不要想當然理解為函式
- sizeof使用時可以不加()
- sizeof可以加變數、常量、資料型別
- 跟資料型別是必須加()
- 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:陣列的記憶體分析和注意點- 儲存空間的劃分(記憶體的分配是從高地址到低地址進行的,但一個數組內部元素又是從低到高進行的)【注:對於以後學習重要】
- 陣列名的作用,檢視元素地址
- 注意陣列不要越界
- "123”其實是由’1’、’2’、’3’、’\0’組成
- 字串的輸出”%s”,’\0’是不會輸出的
- 計算的是字元數,不是字數
-
計算的字元不包括’\0’,一個漢字相當於3個字元
例子:"哈haha" 字元數為7
- 從某個地址開始的數字符個數,知道遇到’\0’為止
指標部分在C語言中佔據重要地位,所以重點學習與整理了指標的知識:
知識點9:指標定義的格式知識點10:指標作用變數型別 *變數名 如Int *p
能夠根據一個地址值,訪問對應的儲存空間
例:
Int *p;
Int a = 90;
P = &a;
*p = 10;//把10賦值給p所指的儲存空間
知識點11:指標使用注意
- Int *p只能指向int型別的資料
- 指標變數只能儲存地址
- 指標變數未經初始化不要拿來間接訪問其他儲存空間
- 遍歷陣列
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 C】C語言中常用的幾個函式的總結【一】
1、memset函式 定義變數時一定要進行初始化,尤其是陣列和結構體這種佔用記憶體大的資料結構。在使用陣列的時候經常因為沒有初始化而產生“燙燙燙燙燙燙”這樣的野值,俗稱“亂碼”。每種型別的變數都有各自的初始化方法,memset() 函式可以說是初始化記憶體的“萬能函式”,通常為新申請的記憶體進行初始化工作。
【linux C】C語言中常用的幾個函數的總結【一】
有效 getchar() 調用 指向 ++ 再次 無法 linux c 收回 1、memset函數 定義變量時一定要進行初始化,尤其是數組和結構體這種占用內存大的數據結構。在使用數組的時候經常因為沒有初始化而產生“燙燙燙燙燙燙”這樣的野值,俗稱“亂碼”。每種類型的變量都有各
【linux C】C語言中常用的幾個函式的總結【二】
3、fgets 雖然用 gets() 時有空格也可以直接輸入,但是 gets() 有一個非常大的缺陷,即它不檢查預留儲存區是否能夠容納實際輸入的資料,換句話說,如果輸入的字元數目大於陣列的長度,gets 無法檢測到這個問題,就會發生記憶體越界,所以程式設計時建議使用 fgets()。fgets() 的原型為
C語言------五大常用演算法總結
引言 據說有人歸納了計算機的五大常用演算法,它們是貪婪演算法,動態規劃演算法,分治演算法,回溯演算法以及分支限界演算法。雖然不知道為何要將這五個演算法歸為最常用的演算法,但是毫無疑問,這五個演算法是有很多應用場景的,最優化問題大多可以利用這些演算法解決。演算法的本質
c語言陣列部分知識點總結
對於陣列部分知識點的學習,主要需要掌握:計算平均分、最高分、成績排序與查詢等等,主要向函式傳遞一維陣列和二維陣列的方法。還學習陣列型別、陣列的定義和初始化,以及對陣列名特殊含義的理解。 1.陣列元素定義初為a[0](一個代表下標個數為1) 2.c語言中陣列的下標都是從0開始的。 3.最好把幻