繼續上篇指標未完成的學習任務。
指向函式的指標包含函式的位址,可以通過指標呼叫該函式。下面這種格式宣告了乙個函式指標:
int (*fpt)();
指標的名字是fpt。這個特殊的指標指向乙個返回整數值並且不接受實參的函式。指標宣告必須與指標所指函式的宣告相匹配。
#include
"stdafx.h
"#include
<
iostream
>
void
filefunc(),editfunc();
intmain(
intargc,
char
*ar**)
void
filefunc()
void
editfunc()
執行效果如下:
通過使用函式指標的陣列,可以建立乙個有限狀態機,程式行為取決於變數的值,根據變數值確定程式接下來執行哪個函式。**驅動的選單管理程式就是乙個有限狀態機的例子。
如下demo演示了如何通過4個原型選單分別顯示一條訊息:
#include
"stdafx.h
"#include
<
iostream
>
struct
menu;
void
filefunc();
void
editfunc();
void
viewfunc();
void
exitfunc();
menu menu=,
,,};const
intsels
=sizeof
menu
/sizeof
(menu);
intmain(
intargc,
char
*ar**)
std::cout
<<
"select:";
std::cin
>>
sel;
if(sel
<
sels+1
&&sels
>0)
}return0;
}void
filefunc()
void
editfunc()
void
viewfunc()
void
exitfunc()
執行效果:
指向指標的指標可能不太容易處理。需要兩個星號宣告指標。如下所示:
char** opp;
可以由此類推,三個四個等多個星星,對應指向幾個指標的指標。
下面有乙個demo演示如何使用乙個被呼叫函式修改呼叫函式的區域性指標,並處理指標陣列:
#include
"stdafx.h
"#include
<
iostream
>
void
findcredit(
float
**fpp);
intmain(
intargc,
char
*ar**)
;float*fp
=values;
findcredit(
&fp);
std::cout
<
fp<
";return0;
}void
findcredit(
float
**fpp)
else}}
執行效果如下:
上面程式用陣列位址初始化fp 指標,並把fp 指標的位址傳遞給findcredit函式,該函式將指向指標的指標作為其唯一形參的實參。findcredit用**fpp表示式間接地提取陣列元素值。findcredit函式遞增呼叫函式指標向陣列的指標,而不是遞增自己指向呼叫函式指標的區域性指標,以便在陣列的迴圈訪問中查詢負值。(*fpp)++;語句的含義是遞增指標形參所指定的內容,。而當遇到負值則跳出迴圈體。程式結束。
指向指標的指標的另一種用法是處理指標陣列。
下面的demo演示了如何通過指向指標陣列的指標列印出陣列內容:
#include
"stdafx.h
"#include
<
iostream
>
char
*names=;
intmain(
intargc,
char
*ar**)
return0;
} 執行效果如下:
如上**,把nm 指標初始化為字元指標陣列names的位址。每個std::count呼叫都傳遞nm指標所指的字元指標,然後遞增指標,指向陣列的下乙個元素(指標)。
當我們宣告乙個指向const 變數的指標時,意味著程式不能通過指標修改變數。宣告形式如下:
const char* str;
任何對str指標所指字元資料的引用必須為唯讀的。這種用法有幾層含義。首先,不能將乙個const 變數的位址賦予指標,除非指標按上面的方式宣告。此外,如果函式的某個形參被宣告為指向乙個非const 的變數指標,就不能把const 變數的位址對應該形參的實參傳遞給函式。看如下demo:
#include
"stdafx.h
"#include
<
iostream
>
void
cpytoupper(
char
*s1,
const
char
*s2)
intmain(
intargc,
char
*ar**)
執行效果如下:
我們可以定義在初始化後就不能改變自身內容的指標,這種做法可以增加**的安全性。如果指標永遠不用於迭代,換言之,如果這個指標永遠保持其初始值,就按下面的方式將其宣告為const指標變數:
char* const ptr=buf;
這裡就不細究了。
void 指標可以指向任何型別的變數,其宣告方式如下:
void* vptr;
任何位址都可以賦給void 指標,除非使用了型別強型轉換,否則就不能用void 指標來取出乙個變數值。
關於指標的學習,暫時到這裡,以後再回頭來加深下理解。
菜鳥C 自學筆記 指標 下
繼續上篇指標未完成的學習任務。指向函式的指標指向指標的指標指向指標陣列的指標指向const 變數的指標const 指標變數void 指標int fpt 指標的名字是fpt。這個特殊的指標指向乙個返回整數值並且不接受實參的函式。指標宣告必須與指標所指函式的宣告相匹配。include stdafx.h ...
C語言自學筆記 C函式和指標
函式指標 主語是指標,即指向函式的指標。可以參照整型指標,字元型指標等概念來理解 函式指標實際上是函式 在記憶體中的起始位址。示例 int sub num1,num2 a,int宣告函式的返回值是整型 b,sub 通過 結合兩個物件使他們具有更高的運算優先順序,通知編譯器這是乙個指標型別的物件 c,...
菜鳥自學Linux 命令 學習筆記(一)
1.常用linux指令 shutdown rh now 簡單的關機指令,雖然菜鳥們長按關機鍵強制關機,顯示屏也黑了,最終強制關機前丟失一些未儲存的資料也不是沒有可能的,結果不安全有隱患。於是我的習慣改變,開啟控制台 我使用的系統是linux mint 核心是linux 18.2,window的小夥伴...