前敘 : 原先對c語言的學習,對指標有恐懼感.當c語言學到一定的程度的時候,
再學習指標有種水到渠成的感覺。
對指標變數的定義包括三個內容
1)指標型別說明,即定義變數為乙個指標變數
2)指標變數名
3)變數值(指標)所指向的變數的資料型別;
一般是這樣的: 型別說明符 *變數名 int = *p;
這個小星星號 * 表示這是乙個變數.
指標變數的引用
1) &:取位址運算子 就像你給別人打了一頓,甚是不服,
然後找他家的位址(指標的位址),去他家偷偷埋伏拿起搬磚報復他.
2) * :指標運算子 (又或稱 "間接訪問"的運算子)
指標變數初始化的方法.
int指標使用的時候注意事項:a ; int*p
=&a;
又或者下面這種,賦值法
inta ;
int*p;
p=&a;
兩種的方法的目的都是為指向變數的位址.
1.指標變數的命名規則和淒然變數的命名的規則一樣
2.指標不能與現有的變數同名
3.指標可存做c語言中的任何基本資料型別,資料和其他所有高階資料結構的位址
4.若指標已宣告為指向某種型別資料的位址,則他不能用於儲存其他型別的資料的位址
5.應為指標指定乙個位址後,才能在語句中使用指標
指標p在執行某時刻指向變數x,在另乙個時刻也可以指向變數y
儲存在一塊的記憶體空間中
陣列名就是這塊的連續記憶體空間的首位址
指標本身是乙個變數
*根據位址取值- 順藤摸瓜;
指標不可以賦常量
指標式乙個變數,儲存另個變數的記憶體位址
指標的宣告由基本型別,星號(*)和變數名組成
為指標估值,賦值運算右側必須是乙個位址如果是指標變數需要在前面加乙個取位址運算子&;
如果是另乙個指標變數或者是乙個陣列,不需要加&運算子
運算子* 用於返回指標指向的記憶體位址中儲存的值
使用指標訪問一維陣列和二維陣列的元素
例程
#include int
main()
, ,
, ,
, };
for(i
=0;i
<
5;i++)
printf("\n");
} /*
for(i = 0;i<3;i++)
return 0;
*/ }
/*
輸出的結果為陣列的元素
*/
指標的遞增和遞減(++.--)
例程:
inti ; double
score[5] =
double
*ptr_score;
for(i
=0;i
<
5;i++)
inti ; double
score[5] =
double
*ptr_score;
for(i
=0;i
<
5;i++)
inti ; double
score[5]=
double
*ptr_score;
ptr_score=&
score[1];
ptr_score
+=2 ; //指向陣列2的位址
ptr_socre
-=3;//指標減去3 值為0;
/* 結構指標變數的一般形式為:
struct 結構名 *結構指標變數名
定義stu 這個結構,如要說明乙個
指向stu 的指標變數 pstu,可寫為:
struct stu *ptu;
結構指標變數,就能更方便地訪問結構變數的各個成員
其訪問的一般形式為
(*結構指標變數).成員名
或為: 結構指標變數 ->成員
例如:
(*pstu).num
或者pstu->num
注意(*pstu)兩側的括號不可少,固成員"."優先順序高於"*".
如去掉括號寫作 *pst.num 則等效於 *(pstu.num),這樣意義就完全不對了.
*/
第一次發部落格,如有不足,望求指出,後續修改!!
c語言指標學習筆記
example 1 int a,b,p,q p a p a p q b p p a 錯誤,因為p實際上是乙個位址,而a是乙個整型值 p q 錯誤,因為這句話的意思是 將位址q指向的單元的值賦給位址p。而實際上p是乙個位址,是不能存值得 p a 錯誤 注意,如果這樣定義了 p,那麼 p表示位址 指標 ...
C語言指標學習筆記
假設我們定義乙個指標p。那麼會經常使用到三個符號 1,p 2,p 3,p 我們知道,p是乙個指標變數的名字,表示此指標變數指向的記憶體位址,如果使用 p來輸出的話,它將是乙個16進製制數。而 p表示此指標指向的記憶體位址中存放的內容,一般是乙個和指標型別一致的變數或者常量。而我們知道,是取位址運算子...
c語言指標學習筆記
1.運算子 位址的大小是否與int相同取決於編譯器。32位是4位元組,64位是8位元組。因此位址的輸出不能是 x,應該是 p。2.指標int i int p i int p,q int p,q 3.指標作函參 訪問這個位址上的變數需要使用到單目運算子 接著可以通過指標使用和改寫這個變數。int i ...