C語言中的幾個重要概念
學習是一個循序漸進的過程,需要同學們不斷的學習和努力。C語言中的幾個重要概念就為大家分享這裏了,希望能幫助大家更好的複習所學的知識。
一、C語言的指針
1.指針説明
指針是包含另一變量的地址變量。
(1)int *p
p是一個指針,指向一個整形數。
(2)int *p()
p是一個函數,該函數返回一個指向整數的指針。
(3)int (*p)()
p是一個指針,該指針指向一個函數,這個函數返回一個整數。
(4)int *p[]
p是一個數組,該數組的每一個元素是指向整數的指針。
(5)int (*p)[]
p是一個指針,該指針指向一個數組,這個數組的每一個元素是一個整數。
(6)int *(*p)()
p是一個指針,該指針指向一個函數,這個函數返回一個指向整數的指針。
2.指針的初始化(賦地址)
(1)通過符號&取變量(包括結構變量、數組第一個元素)的地址賦給指針;
(2)把數組名賦給指針;
(3)把函數名賦給指向函數的指針;
(4)動態分配內存
例:struct c{double r,i;};
struct c *p;
p=(struct c *)malloc(sizeof(struct c));
3.指針與數組、函數的關係
(1)對於一維數組 int a[i] 或指針 int *a
a+i 指向 a[i]
(2)對於字符串 char s[i] 或指針 char *s
s+i 指向第 i個字符 s[i]
(3)對於二維數組int a[i][j]
*a+j 指向 a[0][j]
*(a+i) 指向 a[i][0]
*(a+i)+j 指向 a[i][j]
例:對於 a[2][3]={1,2,3,4,5,6,}; 有 *(*(a+1)+1)=5;
(4)對於字符串數組char p[i][j] 或字符型指針數組char *p[i]
*p+j 指向第 0個字符串的第 j個字符
*(p+i) 指向第 i個字符串的第 0個字符
*(p+i)+j 指向第 i個字符串的第 j個字符
例:對於 *p[]={"ABC","DEF"}; 有 *(*(p+1)+1)='E';
例:對於 char p[][3]={"ABC","DEF"}; 有 *(*(p+1)+1)='E';
(5)對於指針數組int *a[i]
a[i] 指向 變量i
即 *a[i]=變量i 或 a[i]=&變量i
(6)對於結構struct XY
{int x;int *y}*p;
p是指向結構XY的指針
(*p).x 或 p->x 是表示 x 的內容
(*p).y 或 p->y 是表示指針 y 的值(地址)
*(*p).y 或 *p->y 是表示 y 所指的內容
&(*p).x 或 &p->x 是表示 x 的地址
(7)指向函數的指針
對於 void func(char *str)
{…}; //定義了一個函數
void (*p)(char*);//定義了一個函數指針
p=func; //讓指針指向函數
則(*p)("…"); //用指針p可以調用函數func
(8)指向多個不同函數的指針數組
對於void function_1() {…};
…
void function_4() {…}; //定義了四個函數
typedef void(*menu_fcn)();//定義了指向函數的指針
menu_fcn command[4]; //定義了指針數組
command[0]=function_1;
…
command[3]=function_4; //讓指針數組指向四個函數
則command[0](); //用指針數組中的一個元素調用一個函數
4.指針的分類
(1)近指針(near):
近指針為16位指針,它只含有地址的偏移量部分。近指針用於不超過64K 字節的單個數據段或代碼段。在微、小和中編譯模式下產生的數據指針是近指針(缺省狀態);在微、小和中編譯模式下產生的碼指針(指向函數的指針)是近指針(缺省狀態)。
(2)遠指針(far)
遠指針為32位指針,指針的段地址和偏移量都在指針內。可用於任意編譯模式。每次使用遠指針時都要重裝段寄存器。遠指針可尋址的目標不能超過64K ,因為遠指針增減運算時,段地址不參與運算。在緊湊、大和巨模式下編譯產生的數據指針是遠指針(缺省狀態)。
(3)巨指針(huge)
巨指針為32位指針,指針的段地址和偏移量都在指針內。可用於任意編譯模式。遠指針尋址的目標可以超過64K 。巨指針是規則化的指針。
5.指針的轉換
(1)遠指針轉換成巨指針
使用以下函數
void normalize(void far * * p)
{
*p=(void far *)(((long)*p&0xffff000f)+(((long)*p&0x0000fff00<<12));
}
6.指針的使用
(1)將浮點數轉換成二進制數
float ff=16.5;
unsigned char *cc;
(float*)cc=&ff;
//此時cc的內容為"00008441"
//即cc第一個字節=0;第二個字節=0;第三個字節=0x84;第四個字節=0x41;
(2)將二進制數轉換成浮點數
float ff;
unsigned char *cc;
cc=(unsigned char*)malloc(4);
cc=(unsigned char*)&ff;
*(cc+0)=0;
*(cc+1)=0;
*(cc+2)=0x84;
*(cc+3)=0x41;
//此時ff=16.5
free(cc);
二、C 語言的函數
1.用户自定義函數格式
類型 函數名(形式參數表)
-
2017全國計算機二級《C語言》考試題及答案
在備考複習階段,需通過大量試題練習,加深對考點的理解和掌握。以下是本站小編搜索整理的一份全國計算機二級《C語言》考試題及答案,供參考練習,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!一、選擇題1).我們所寫的每條C語句,經過編譯最...
-
關於C語言精選模擬練習題
C語言是一個有結構化程序設計、具有變量作用域(variablescope)以及遞歸功能的過程式語言。下面是小編為大家整理的關於C語言精選模擬練習題,歡迎參考~5:請編寫一個函數fun,它的功能是:比較兩個字符串的長度,(不得調用c語言提供的`求字符串長度的函數),函數返回較長...
-
2017年計算機二級C語言考前訓練題及答案
計算機二級對於很多考生來説還是比較有難度的,那麼怎樣順利通過二級考試呢?這就需要大家平時多練習和找方法了。以下是本站小編整理的2017年計算機二級C語言考前訓練題及答案,希望對大家有幫助!考前訓練題一1:第1題m個人的成績存放在score數組中,請編寫函數fun,它...
-
初學C語言的人最常問的幾個問題
C語言是一門通用計算機編程語言,應用廣泛。對於新手來説學習C語言並不是那麼容易,下面是C語言初學者最常問的幾個問題,歡迎閲讀!1.多久能學會編程?這是一個沒有答案的問題。每個人投入的時間、學習效率和基礎都不一樣。如果你每天都拿出大把的時間來學習,那麼兩三...