日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于C语言的一些小知识点

發布時間:2024/4/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于C语言的一些小知识点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#include <string.h>
功能:由src所指內存區域復制count個字節到dest所指內存區域。
說明:src和dest所指內存區域不能重疊,函數返回指向dest的指針??梢阅盟截惾魏螖祿愋偷膶ο?。

舉例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),會造成b的內存地址溢出。

?

2.malloc()和calloc()

函數malloc()和calloc()都可以用來動態分配內存空間,但兩者稍有區別。

??? malloc()函數有一個參數,即要分配的內存空間的大小:

??? void *malloc(size_t size);

??? calloc()函數有兩個參數,分別為元素的數目和每個元素的大小,這兩個參數的乘積就是要分配的內存空間的大小。

??? void *calloc(size_t numElements,size_t sizeOfElement);

??? 如果調用成功,函數malloc()和函數calloc()都將返回所分配的內存空間的首地址。

??? 函數malloc()和函數calloc()的主要區別是前者不能初始化所分配的內存空間,而后者能。如果由malloc()函數分配的內存空間原來沒有被使用過,則其中的每一位可能都是0;反之,如果這部分內存曾經被分配過,則其中可能遺留有各種各樣的數據。也就是說,使用malloc()函數的程序開始時(內存空間還沒有被重新分配)能正常進行,但經過一段時間(內存空間還已經被重新分配)可能會出現問題。

??? 函數calloc()會將所分配的內存空間中的每一位都初始化為零,也就是說,如果你是為字符類型或整數類型的元素分配內存,那麼這些元素將保證會被初始化為0;如果你是為指針類型的元素分配內存,那麼這些元素通常會被初始化為空指針;如果你為實型數據分配內存,則這些元素會被初始化為浮點型的零。

?

3.fread()
  功 能: 從一個流中讀數據
  函數原型: int fread(void *ptr, int size, int nitems, FILE *stream);
  參 數:用于接收數據的地址(指針)(ptr)
  單個元素的大小(size) :單位是字節而不是位,例如讀取一個整數值就是4
  元素個數(nitems)
  提供數據的文件指針(stream)
  返回值:成功讀取的元素個數

  完成一次讀操作(fread())后,如果沒有關閉流(fclose()),則指針(FILE * stream)自動向后移動前一次讀寫的長度,不關閉流繼續下一次讀操作則接著上次的輸出繼續輸出。

4.fflush(stdout)

  在printf()后使用fflush(stdout)的作用是立刻將要輸出的內容輸出。
  當使用printf()函數后,系統將內容存入輸出緩沖區,等到時間片輪轉到系統的輸出程序時,將其輸出。
  使用fflush(out)后,立刻清空輸出緩沖區,并把緩沖區內容輸出。
  例如:
  for (ctr = 1; ctr <= wait; ctr++)
  {
    printf("."); /* print a dot */
    fflush(stdout); /* force dot to print on buffered machines */
    sleep((int) 1); /* pause 1 second */
  }

  用fflush(stdout)能使機器每輸出一個.暫停一秒鐘,而不會出現亂序(例如:PP。。。PP。PPP。。。等)現象。

?

5.define

  #define A(x) T_##x
  #define B(x) #@x
  #define C(x) #x

  假設:x=1,則有:

  A(1)------〉T_1
  B(1)------〉'1'
  C(1)------〉"1"

6.assert()

  assert宏的原型定義在<assert.h>中,其作用是如果它的條件返回錯誤,則終止程序執行,原型定義:
  #include <assert.h>
  void assert( int expression );

  assert的作用是現計算表達式 expression ,如果其值為假(即為0),那么它先向stderr打印一條出錯信息,然后通過調用 abort 來終止程序運行。

?

7.static關鍵字

  在C語言中,static的作用有三條。
(1) 隱藏。
  當我們同時編譯多個文件時,所有未加static前綴的全局變量和函數都具有全局可見性。利用這一特性可以在不同的文件中定義同名函數和同名變量,而不必擔心命名沖突。Static可以用作函數和變量的前綴,對于函數來講,static的作用僅限于隱藏,而對于變量,static還有下面兩個作用。
(2) 保持變量內容的持久。

  存儲在靜態數據區的變量會在程序剛開始運行時就完成初始化,也是唯一的一次初始化。共有兩種變量存儲在靜態存儲區:全局變量和static變量,只不過和全局變量比起來,static可以控制變量的可見范圍,說到底static還是用來隱藏的。

(3) 默認初始化為0。

  其實全局變量也具備這一屬性,因為全局變量也存儲在靜態數據區。在靜態數據區,內存中所有的字節默認值都是0x00,某些時候這一特點可以減少程序員的工作量。比如初始化一個稀疏矩陣,我們可以一個一個地把所有元素都置0,然后把不是0的幾個元素賦值。如果定義成靜態的,就省去了一開始置0的操作。

  最后對static的三條作用做一句話總結。首先static的最主要功能是隱藏,其次因為static變量存放在靜態存儲區,所以它具備持久性和默認值0。

轉載于:https://www.cnblogs.com/yucan/archive/2010/12/20/1911675.html

總結

以上是生活随笔為你收集整理的关于C语言的一些小知识点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。