宏定義是預處理命令的一種,它允許用一個標識符來表示一個字符串。先看一個例子:#include <stdio.h>#define N 100int m
C語言允許宏帶有參數。在宏定義中的參數稱為形式參數,在宏調用中的參數稱為實際參數,這點和函數有些類似。對帶參數的宏,在調用中,不僅要宏展開,而且要用實參去代換形
帶參數的宏和函數很相似,但有本質上的區別:宏展開僅僅是字符串的替換,不會對表達式進行計算;宏在編譯之前就被處理掉了,它沒有機會參與編譯,也不會占用內存。而函數是
假如現在要開發一個C語言程序,讓它輸出紅色的文字,並且要求跨平台,在 Windows 和 Linux 下都能運行,怎麼辦呢?這個程序的難點在於,不同平台下控制文
預處理指令是以#號開頭的代碼行,#號必須是該行除了任何空白字符外的第一個字符。#後是指令關鍵字,在關鍵字和#號之間允許存在任意個數的空白字符,整行語句構成了一條
計算機中所有的數據都必須放在內存中,不同類型的數據占用的字節數不一樣,例如 int 占用4個字節,char 占用1個字節。為了正確地訪問這些數據,必須為每個字節
數據在內存中的地址也稱為指針,如果一個變量存儲了一份數據的指針,我們就稱它為指針變量。在C語言中,允許用一個變量來存放指針,這種變量稱為指針變量。指針變量的值就
指針變量保存的是地址,本質上是一個整數,可以進行部分運算,例如加法、減法、比較等,請看下面的代碼:#include <stdio.h>int mai
數組(Array)是一系列具有相同類型的數據的集合,每一份數據叫做一個數組元素(Element)。數組中的所有元素在內存中是連續排列的,整個數組占用的是一塊內存
C語言中沒有特定的字符串類型,我們通常是將字符串放在一個字符數組中,這在《C語言字符數組和字符串》中已經進行了詳細講解,這裡不妨再來演示一下:#include
在C語言中,函數的參數不僅可以是整數、小數、字符等具體的數據,還可以是指向它們的指針。用指針變量作函數參數可以將函數外部的地址傳遞到函數內部,使得在函數內部可以
C語言允許函數的返回值是一個指針(地址),我們將這樣的函數稱為指針函數。下面的例子定義了一個函數 strlong(),用來返回兩個字符串中較長的一個:#incl
指針可以指向一份普通類型的數據,例如 int、double、char 等,也可以指向一份指針類型的數據,例如 int *、double *、char * 等。如
如果一個數組中的所有元素保存的都是指針,那麼我們就稱它為指針數組。指針數組的定義形式一般為: dataType *arrayName[length];[ ]的優
二維數組在概念上是二維的,有行和列,但在內存中所有的數組元素都是連續排列的,它們之間沒有“縫隙”。以下面的二維數組 a 為例: int
一個函數總是占用一段連續的內存區域,函數名在表達式中有時也會被轉換為該函數所在內存區域的首地址,這和數組名非常類似。我們可以把函數的這個首地址(或稱入口地址)賦
指針(Pointer)就是內存的地址,C語言允許用一個變量來存放指針,這種變量稱為指針變量。指針變量可以存放基本類型數據的地址,也可以存放數組、函數以及其他指針
前面的教程中我們講解了數組(Array),它是一組具有相同類型的數據的集合。但在實際的編程過程中,我們往往還需要一組類型不同的數據,例如對於學生信息登記表,姓名
所謂結構體數組,是指數組中的每個元素都是一個結構體。在實際應用中,結構體數組常被用來表示一個擁有相同數據結構的群體,比如一個班的學生、一個車間的職工等。定義結構
指針也可以指向一個結構體,定義的形式一般為: struct 結構體名 *變量名;下面是一個定義結構體指針的實例:struct stu{ char *nam