新聞速報

        

2014年2月26日 星期三

C語言 ~~~ 指標與函數

C語言複習~~~指標與函數
 
年紀大,東西都忘東忘西的,今天複習C Primer Plus 4/e,把一些東西記錄下來。
 
高度技巧的宣告
 * 表示一個指標
( ) 表示一個函數
[ ] 表示一個陣列
※( )與[ ]有相同的優先順序,他們的結合姓是由左到右 →
 
int a[8][8];    // int陣列的陣列
int **ptr;     // 指向int 指標的指標
int *risks[10];  // 指向int 型態的10個指標陣列
int (*risks)[10]; // 指向10個int 陣列的指標 
int *oof[3][4];  // 指向int型態的3x4指標陣列
int (*uuf)[3][4]; // 指向3x4 int 陣列的指標
int (*uof[3])[4]; // 指向4個元素的int 陣列的3個元素的指標陣列
 
char *fump( );   // 回傳指向字元的指標的函數
char (*fump)( );  // 指向會回傳字元型態的函數的指標
char (*fump[3])( ); // 3個指向會回傳字元型態的函數的指標陣列
 
typedef int arr5[5]; 
typedef arr5 *P_arr5;
typedef p_arr5 arrp10[10];
arr5 togs; // togs 是有 5 個 int 元素的陣列
p_arr5 P2; // p2 是指向有 5 個 int 陣列的指標
arrp10 ap; // ap 是 10 個指向 5 個 int 陣列的指標陣列
 
 
 
函數宣告與指標
 
void ToUpper( char * ); // 將字串轉大寫
 
其中ToUpper( )函數型態是void,參數是char * ,
如果宣告為這個函數宣告一個 pf指標,就會像下面一樣:
 
void (*pf)(char*); // 指向函數的指標,例如: pf = ToUpper,但是不能寫成pf = ToUpper( );
 
其中括號內的 (*pf) 會被括號結合,所以閱讀時他會是一個指標,所以他是一個指向函數的指標,如果省略就會不同意義:
 
void *pf( char * ) ; // pf 是回傳指標的函數
 
 
 
※一般如果沒有註明時,定義的名稱本身就是位址起始,例如:
int a[10];
int *p;
p = a; 或是 p = &a[0];
 
void ToUpper(char *);
void (*pf)(char*);
pf = ToUpper;
 
 
應用範例:
void ToUpper(char *);
void (*pf)(char*);
void Show( void (*ff)(char*), char *str );
pf = ToUpper;
 
Show( ToUpper, mis ); // Show函數使用ToUpper函數: ff = ToUpper
Show( pf, mis );   // Show函數使用ToUpper函數: ff = pf
 
void Show( void (*ff)(char*), char *str )
{
   (*ff)(str); // 呼叫ToUpper函數,參數 = str
   puts(str); // 顯示字串 
} 


void test(int *arry)
{
  *arry = 5;
  *(arry+1) =10;
  *(arry+2) =15;
}
 
或是:
  arry[0] = 5;
  arry[1] = 10;
  arry[2] = 15;
 
在語意上, *(arry+n) 跟 arry[n] 是完全一樣的. 後者可以看成是前者的方便寫法.
 
指標變數 *arry ,
其中 *arry 讀/寫 變數的內容
其中 arry 讀/寫 變數的位址  (差一個星號)
 

沒有留言:

張貼留言