int d = 5, result; float f = 6.382; result = d * (int) f; |
//聲明整型變量並賦值 //聲明單精度浮點型變量並賦值 //將變量強制轉換爲整型再計算 |
此例的計算結果爲 30, 在運算之初已將變量 f 強制轉換爲整型。假若沒有使用構成符,
表達式 result = d * f 的結果爲 31,因爲變量首先被轉換成單精度浮點型運算,然後賦值時
再被轉爲整型。
C 語言中的簡寫形式
c = c / ( a * b - c % b++ ); c /= a * b - c % b++; |
//原表達式 //簡化後的表達式 |
C 語言的預處理命令
宏替換命令
#define 標識符 字符串
#define MAX(a, b) (a >= b) ? a : b | //定義宏替換 MAX(),當 a 大於或等於 b 時 //返回 a 值,否則返回 b |
int main() { int x = 190, y = 106; printf("MAX: %d", MAX(x, y)); |
|
//定義整型變量 x、 y 並賦值 //輸出 x 和 y 中較大的一個,使用宏代換 |
終止編譯命令
#error 錯誤信息字符串
文件包含命令
#include "filename.h"
#include <stdio.h>
這兩行代碼都使編譯器讀入並編譯頭文件或源代碼文件。雙引號用於包含指定相對路
徑的文件,若未指明相對路徑,則會在當前源文件所在的目錄內檢索。如果文件沒找到,
則檢索標準目錄,不檢索當前工作目錄。尖括號用於包含標準函數庫文件和用戶在編譯指
令裏所指明的函數庫文件,系統會在這些函數庫中搜索指定文件。
指針的例子:
#include <stdio.h>
int main(){
int i,*pi;
char c[]={97,98,99,100,101};
char *p;
p=c;
printf("%c\n",*p++);
printf("%c\n",*p++);
printf("#######\n");
i=4;
pi=&i;
printf("%d\n",*pi++);
printf("%d\n",(*pi)++);
printf("%d\n",i);
return 0;
}
結果如下:
a
b
#######
4
10485312
4
指針與一維數組
int i[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *pi;//定義整型數組 i 和整型指針變量*pi
pi = i; //將指針變量*pi 指向數組 i 的首地址
該賦值操作等同於“ pi = &i[0]”
- “ pi + n”或“ i + n”表示數組元素 i[n]的地址,即“ & i[n]”。數組 i 有 10 個元素,n 的取值爲 0 至 9,則數組的地址可表示爲“ pi + 0”至“ pi + 9”,或“ i + 1”至“ i + 9”,與&i[0]至&i[9]的作用一樣。
- 知道了數組元素的地址表示方法,“ *( pi + n)”和“ *(i + n)”就表示爲數組的各元素即等效於 i[n]。
- 指向數組的指針變量也可用數組的下標形式表示爲 pi[n],其效果相當於“ *(pi +n)”。
指針與二維數組
int i[2][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *pi;
pi = i[0];
如果要訪問其中的元素i[1][2],則可用公式 1 × n + 2 得到該元素的位置,引用時可寫作“ *( pi + 1 * n + 2)”。
二維數組每一行都有一個首地址,如 i[0]代表&i[0][0]的地址, i[1]代表 i[1][0]的地址。因此,二維數組也可以被看作 m 個長度爲 n 的一維數組,引用二維數組需要將每行的首地址賦給指針變量。
指針與字符串數組
字符型指針變量指向字符串數組首地址後,該指針即可當作字符串使用。
puts()函數的作用是將字符串無格式輸出,當*pc 作爲其參數時,會內存中將*pc 所指向的地址開始,到字符串結束符之間的字符輸出到終端。
如果字符數組中沒有字符串結束符,則調用 printf()或 puts()輸出函數後程序會出錯(一直向後處理,輸出很多意想不到的字符,直到遇到值爲 0 的內存塊)。如果字符型指針變量沒有初始化,可能會造成嚴重影響,如下列源代碼所示。
因爲 pc 的值不可知, pc 可能指向內存中的任意位置。將字符串保存到 pc 所指向的內存單元中,可能造成非常嚴重的系統錯誤。這種用法稱之爲無源指針,在程序中應避免出現。
指針的地址分配
GCC 編譯器支持動態分配內存的函數 malloc()和 free(), 它們包含在頭文件 stdlib.h 中。動態內存分配的含義是在程序執行的過程中,動態地劃分內存空間供程序使用。當程序不需要使用這些內存空間,則可以將其釋放。 malloc()函數的作用是向操作系統申請內存, free()函數的作用是釋放所申請的內存。
指 針 數 組
指針數組是一種特殊的數組,這類數組存放的全部是同一數據類型的內存地址。指針數組的定義形式爲:
數據類型 *數組名[長度];
指向常量的指針,必須用 const 定義爲常量指針,以避免修改該指針所指向的數據造成程序錯誤。由於[ ]符號比間接運算符*的優先級要高,所以首先是數組形式 c[4],然後纔是與*結合。這樣,指針數組內包含 4 個指針 c[0]、 c[1]、 c[2]和 c[3],分別指向 4 個字符串的首地址。
指向指針的指針
數據類型 **變量名;