国产精品久久精品-亚洲人成影院77777-欧美精品一区二区三区在线-久久久免费的精品|www.hiycz.com

招生合作
課程分類
您當(dāng)前的位置:武漢覓學(xué)網(wǎng) >武漢覓學(xué)網(wǎng) >學(xué)習(xí)C/C++必須熟記的基礎(chǔ)知識匯總

武漢編程語言學(xué)習(xí)網(wǎng)

學(xué)習(xí)C/C++必須熟記的基礎(chǔ)知識匯總

發(fā)布時間:2020-12-14 14:55:30 已幫助:146人

學(xué)習(xí)C/C++必須熟記的基礎(chǔ)知識匯總

學(xué)習(xí)C/C++必須熟記的基礎(chǔ)知識匯總-武漢C/C++培訓(xùn)機構(gòu)

學(xué)習(xí)C/C++必須熟記的基礎(chǔ)知識匯總

  如何更高效學(xué)習(xí)C/C++語言編程?這里C/C++培訓(xùn)機構(gòu)整理了學(xué)習(xí)C/C++必須熟記的基礎(chǔ)知識匯總分享給大家,希望對大家學(xué)習(xí)C/C++提供一些幫助。
  (1)const與#define
  const在C++中包含了更豐富的含義,而在C語言中僅意味著:“只能讀的普通變量,”或“不能改變的變量”,故在編譯階段需要的常數(shù)仍然只能以#DEFIEN宏定義!故在C語言中如下程序時非法的:
  const int SIZE=10;
  char a[SIZE];錯誤:SIZE不是常數(shù)!
  (2)static變量初始化的問題
  看下面代碼:
  #include<stdio.h>
  int main(void){
  int i=0;
  for(i=0;i<5;i++){
  static int a=10;
  printf("static a is[%d]n",a);
  a++;
  }
  return 0;
  }
  該代碼打印出如下內(nèi)容:
  static a is 10
  static a is 11
  static a is 12
  static a is 13
  static a is 14
  該代碼說明變量在定義為static變量后,初始化只進行一次。
  (3)externC問題
  1.被extern“C”限定的函數(shù)或變量是extern類型的
  2.被extern“C”修飾的函數(shù)或變量是按照C語言編譯和鏈接的
  C++和C在編譯時的區(qū)別:
  C++支持函數(shù)重載,而C不支持
  例如:函數(shù)viod foo(int x,int y);在C++中編譯后在符號庫中的名字是_foo_int_int,而C編譯后生成的名字是_foo.
  一句話概括extern“C”的目的:
  實現(xiàn)C++和C及其他語言的混合編程。
  具體用法:
  1.在C++中引用C語言中的函數(shù)和變量,在包含C語言頭文件是,需進行下列處理:
  extern"C"
  {
  #include"cExample.h"
  }
  2.在C中引用C++語言中的函數(shù)和變量,C++頭文件中需添加extern“C”,而在C語言中不能直接引用聲明了extern“C”的頭文件,而應(yīng)該僅將C文件中在C++中定義的extern“C”函數(shù)聲明為extern類型
  例如:
  C++頭文件
  #ifndef CPP_EXAMPLE_H
  #define CPP_EXAMPLE_H
  extern"C"int add(int x,int y);
  #endif
  C++實現(xiàn)文件cpp_Example.cpp
  #include"cppExample.h"
  int add(int x,int y)
  {
  return x+y;
  }
  C實現(xiàn)函數(shù)Cfile.c
  extern int add(int x,int y)
  int main(int argc,char*argv[])
  {
  add(2,3);return 0;;
  }
  (4)什么是宏定義
  1.宏定義“像”函數(shù);
  2.宏定義不是函數(shù),因而需要括上所有參數(shù);
  3.宏定義可能產(chǎn)生副作用;
  例如:
  #define MIN(a,b)((a)<(b)?(a):(b))
  (5)void和void指針深層探討
  規(guī)則:在C語言中,凡是不加返回值類型限定的函數(shù),就會被編譯器作為返回值處理,但很多程序員卻誤認(rèn)為其為void類型。
  1.任何類型的指針都可以直接賦值給void*類型的指針,無需進行強制類型轉(zhuǎn)換。但是void*指針卻不可以不進行強制類型轉(zhuǎn)換而直接就賦值給其他類型的指針。
  2.如果函數(shù)沒有返回值,應(yīng)聲明為void類型。
  3.如果函數(shù)無參數(shù),那么應(yīng)聲明其參數(shù)為void類型。在C語言中可以給無參數(shù)的函數(shù)傳送任意類型的參數(shù),但是在C++中不能向無參數(shù)的函數(shù)傳送任何參數(shù),錯誤提示:function does not take 1 parameters.所以無論是C還是C++,若函數(shù)不接受任何參數(shù),應(yīng)將其聲明為void類型。
  4按照ANSI(American National Standards Institute)標(biāo)準(zhǔn),不能對void指針進行算法操作,這是因為ANSI標(biāo)準(zhǔn)認(rèn)定:進行算法操作的指針必須是確定知道其指向類型大小的。例如:
  int*ptr;
  ptr++;
  ptr++的結(jié)果是使其增大sizeof(int).
  但是GNU則不這么認(rèn)定,它指定void*的算法操作和char*一致。
  5.如果函數(shù)的參數(shù)可以是任意類型指針,那么應(yīng)將其聲明為void*類型。
  典型的如內(nèi)存操作函數(shù):
  void*memcpy(void*dest,const void*src,size_t len);
  void*memset(void*buffer,int c,size_t num);
  這樣,任何類型的指針都可以傳入memcpy和memset中,這也真實的體現(xiàn)了內(nèi)存操作函數(shù)的意義,因為它操作的對象僅僅是一片內(nèi)存,而無論這片內(nèi)存是什么類型!
  6.void不能代表一個真實的變量
  如void a;錯誤
  (6)內(nèi)存分配方式
  內(nèi)存分配方式有3中:
  1.從靜態(tài)存儲區(qū)域分配。內(nèi)存在程序編譯的時候就已經(jīng)分配好,這塊內(nèi)存在程序的整個運行期間都存在,例如全局變量,static變量。
  2.在棧上創(chuàng)建,在執(zhí)行函數(shù)時,函數(shù)內(nèi)部的局部變量的存儲單元都是可以在棧上創(chuàng)建的。函數(shù)執(zhí)行結(jié)束時這些存儲單元自動被釋放,棧內(nèi)存分配運算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。
  3。在堆上分配,亦稱動態(tài)內(nèi)存分配,程序在運行的時候用malloc或new申請任意多少的內(nèi)存,程序員自己負責(zé)在何時用free或delete釋放內(nèi)存,動態(tài)內(nèi)存的生存期由我們決定,使用靈活,但是容易出錯。
  (7)內(nèi)存操作注意事項
  1.用malloc或new申請內(nèi)存之后,應(yīng)該立即檢查指針值是否為NULL,防止使用指針值為NULL的內(nèi)存。
  2.不要忘記為數(shù)組和動態(tài)內(nèi)存賦初值,防止將未被初始化的內(nèi)存作為右值使用。
  3。避免數(shù)組或指針的下標(biāo)越界,特別要當(dāng)心發(fā)生多1或者少1的操作。
  4.動態(tài)內(nèi)存的申請和釋放必須配對,防止內(nèi)存泄露。
  5.用free或delete釋放了內(nèi)存之后,立即將指針設(shè)置為NULL,防止產(chǎn)生"野指針".
  "野指針"不是NULL指針,是指向”垃圾“內(nèi)存的指針。
  (8)如何判斷大小端格式
  編寫一個C函數(shù),若處理器是big_endian的,則返回0,若是little_endian的,則返回1;
  int checkCPU(void){
  union w{
  int a;
  char b;
  }c;
  c.a=0x1234;
  return(c.b==0x34);
  }
  同樣的功能:linux操作系統(tǒng)中的相關(guān)源代碼是這么做的:
  static union{char c[4];unsigned long I;}enddian_test={{'l','?','?','b'}};
  #define ENDIANNESS((char)endian_test.I)
  如果ENDIANNESS=l,則為小端格式,反之;
  總結(jié):
  在C C++程序的編寫中,當(dāng)多個基本數(shù)據(jù)類型或復(fù)合數(shù)據(jù)結(jié)構(gòu)要占用同一片內(nèi)存時,我們要使用聯(lián)合體;當(dāng)多種類型,多個對象,多個事物只取其一時,我們也可以使用聯(lián)合體來發(fā)揮長處!
  以上就是關(guān)于“學(xué)習(xí)C/C++必須熟記的基礎(chǔ)知識匯總”的內(nèi)容介紹,希望對大家學(xué)習(xí)有所幫助。想要了解更多關(guān)于學(xué)習(xí)C/C++輔導(dǎo)的相關(guān)資訊歡迎來咨詢。