紅色的為2018/1/3之前還未接觸到
首先說指標,指標是乙個可以指向變數位址的特殊變數,它本身有位址,但主要是指向別的變數的指標,它所儲存的變數位址在32位系統下為4位元組,也就是說計算機分配乙個記憶體位址給指標,讓它去儲存別的變數的位址,還有就是它的型別是它所指向的變數的型別,比如: int i ,它的意思是定義乙個指標變數指向整型,類似有浮點型指標,字元型指標,還有指向陣列,指向函式,指向指標的指標等,宣告指標變數的型別是因為可以知道所需要的儲存空間更重要是為了運算和運算規則,下面進行對指標進行宣告和定義的解釋
定義為 《型別》 <*變數名》如int *i;這裡對型別進一步說明,型別為這個指標只能指向定義型別的變數如此例中僅能表示指向型別為整型的變數,指標p++為指向下乙個位址,為int型則加4個位元組以此類推float double等
指標的初始化:
一.可以邊定義邊賦值如
#include
int main()
int a=1;
int *p=&a;//這就是邊定義邊賦值記住變數a前必須有取位址符&因為指標為指向變數位址的所以必須有取位址符號若是陣列則不同因為陣列本身為位址看下邊**。
printf("%d\n",*p);
return 0;
下邊**為陣列的賦值因為陣列本身為位址所以
1. #include
2. int main()
3. ;
5. int *p=a,*h=a;//賦值時不要直接寫成*p=a[0];*h=a[1];這樣不對,陣列本身為位址是說a這個陣列本身為位址所以直接寫成*p=a;就可以了這就是說p指向陣列a的首位址也可以寫成*p=&[0];這樣也可以
6. printf("%d %d\n",*(p),*(h+1));//這樣的話就必須要用括號了因為*為取位址的內容運算級別高所以必須用括號,p+1就是第二個數,之前理解錯了。
7. return 0;
8. }
二.可以先宣告後賦值如
#include
intmain()
int a=1,b=2;
int *p,*h;
p=&a;
h=&b;
printf("%d %d\n",*p,*h);
return 0;
三.用乙個指標給另乙個指標賦值如
#include
int main()
inta=1;
int*p,*h;
p=&a;
h=p;//因為指標p本身為位址所以直接賦給h就可以了不用取位址符&了
printf("%d%d\n",*p,*h);
return0;
注意基型別不同的指標變數之間不能用上述第三種相互賦值,還有就是空指標int *p=null;為空指標代表不指向任何有效位址,被定義為0,即p=』\0』或p=0好像沒啥大用
一些列子:
定義乙個陣列和指標:int a[5],*p;
則a[0]相當於*p
a[1]
相當於*(p+1)
類似a[4]相當於*(p+4)
陣列a相當於&a[0],都是陣列a的位址
a+i==&a[i]
表示第i+1個元素的位址。
C語言學習筆記 指標 指標與一維陣列
int a 10 int p null p a 其中,陣列名a代表陣列的首位址 即 a 0 那麼表示式a i代表陣列中下標為i元素a i 的位址,即 a i 還可以通過使用間接定址 來引用陣列元素。例如 a i 表示取出首位址元素後邊第i個元素的內容,即下標為i的元素a i 此外,還可以通過一維陣列...
c語言學習之指標與二維陣列
二維陣列,陣列名為第陣列第乙個元素的位址即a為 a 0 0 第一行的行名 為一維陣列a 1 也為第乙個元素位址,同理第二行的行名為第二個行第乙個元素的位址即a 0 為 a 0 0 a 2 為 a 2 0 綜上即a a 0 a 0 0 a 2 a 2 0 陣列名加一為行數加一即a 1為第二行即a 1 ...
c語言學習之陣列指標
首先,指標,就相當於乙個位址,指標變數就是拿來存放指標所指向另一變數的位址 定義乙個指標變數需要說明 指標型別,指標變數名。例 int p,a p a 而 陣列,包括陣列型別和陣列名還有陣列長度 陣列長度只能是常量 陣列有一維陣列和多維陣列。例 int a 10 內的必須是常量。那 究竟什麼是陣列指...