1. 指標與指標變數
2. 直接訪問和間接訪問
3. 指標的定義格式
//方法一:
int a;
int*p =
&a;//方法二:
int*p,a;
*p =
&a;
1.概念2.一般形式定義
int
*b[3];
//指標陣列,表示有三個元素,每個元素都是int *;
int(
*p)[3]
;//陣列指標,也可為行指標,它指向包含3個元素的一維陣列;
1.定義乙個指向指標資料的指標又稱為二級指標
2. 二級指標的功能
可以定義乙個字元指標。用字元指標指向字串中的字元。
對於字元指標變數 可以使用下面方法賦值
//方法一:
char
*a =
"hello world!"
//方法二:
char
*a;a =
"hello world!"
//注意此時賦值給a的不是字元,而是 h 的位址
1.函式指標的定義乙個函式在編譯時被分配給乙個入口位址。這個函式的入口位址就稱為函式的指標。
2.函式指標的一般格式
函式型別 ( 指標名)(形參型別)*
int
sum(
int a,
int b)
;//正常函式
int(
*p)(
int,
int)
;//對應的函式指標
int*fun (
void
*a,int
**b)
;//指標函式
int*
(*p)
(void*,
int**)
;//函式指標
3.指標函式的一般格式*型別名 函式名(參數列列);
int*a
(int x,
int y)
;
main函式可以帶有形參 其格式為: main(int argc,char **ar**)
在乙個命令列中包括命令名和需要傳給main函式的引數。
命令列的一般形式為:
命令名 引數1 引數2……引數n
1.const 常變數宣告 在宣告後無法修改
const
int a =10;
//a始終為10,無法修改,若不給a賦初值,則為乙個隨機數
const
char
*p;//const在*號的左邊 表示該指標為唯讀指標 可以指向有效位置,可以指來指去 但無法修改記憶體
char
const
*p;char
*const p //const在*號的右邊則為常量指標 一般要初始化指向** ,指向後無法再指向其他地方 但是可以通過這個指標變數來修改記憶體
const
char
*const p //兩邊都有,則為唯讀常量指標 無法指來指去 也無法通過指標修改記憶體
char
const
*const p
2.出現段錯誤的原因1、訪問非法記憶體
2、修改唯讀常量
3、陣列越界過多
3.void *
void *p
表示指標變數p不指向乙個確定的型別資料,它的作用僅僅是用來存放乙個位址。
void指標它可以指向任何型別資料。也就是說,可以用任何型別的指標直接給void指標賦值。但是,如果需要將void指標的值賦給其他型別的指標,則需要進行強制型別轉換。
可用於函式的傳遞
p = max;
//max為已定義的函式,這時將max的入口位址賦給p;
p1 = p2;
//p1和p2都是指標變數,將p2的值賦給p1;
p =null
;//這時指標變數為空值,不指向任何變數,可以將不用的指標進行這個操作;
*p++
;//相當於 *(p++)
(*p)++;
int a =10;
*a =20;
//解引用符 * 後面必須跟乙個位址,如果 * 後面跟著乙個整數,則編譯器會把整數當做位址處理,此時會發生段錯誤
指標相加沒意義,相加後位址不可控,可能會破壞其他地方內容;連續儲存空間,兩指標相減,可求出兩指標相差位元組數
C語言學習(三) 指標
指標的定義int p char p float p指標變數所佔記憶體的大小 跟前面定義的型別無關 而跟系統有關 16bits作業系統 2b 32bits作業系統 4b 64bits作業系統 8b 指標指向乙個值所在的第乙個位元組 通常乙個位址存放乙個位元組 const修飾指標 指標指向乙個字串時 如...
C語言學習4 指標
int a 10 int p a 一級指標 int s p 二級指標 int p 10 指向陣列的指標 int s 10 指標指向放指標的陣列 這個陣列有十個空間 int p 10 開闢10個空間 每個空間放指標 例如 int br 10 int s 10 br int ar 10 int p 10...
C語言學習筆記02 指標
指標也是一種變數,占有記憶體空間,用來儲存記憶體位址。在指標宣告時,號代表所宣告的變數為指標。在指標使用時,號表示操作指標所指向的記憶體空間的值。p相當於通過位址 p變數的值 找到一塊記憶體,然後操作記憶體。p放在等號的左邊賦值 給記憶體賦值 p放在等號的右邊取值 從記憶體獲取值 指標變數和它所指向...