你害怕指針嗎?
一、指針?啥玩意?
指針嘛?這玩意,還真挺難!每次編程序遇到指針時……
1.指針的基本概念
(1)概念
指針,是C語言的一種派生類型,指針變量存儲的值是某**內存地址
(2)作用
①使用指針可以更加靈活地組織具有複雜關係的數據,簡化操作過程,提高程序的運行效率。
①可以通過其存儲地址間接存取變量中的數據
2.指針變量的定義
【語法格式】:類型標識符 * 標識符
例如:
int *p;
3.指針變量的賦值
(1)指針變量如何賦值?
通過地址符 &
int *p;//定義指針變量
p=&a; //把變量 a 的地址賦給指針變量 p,表示指針 p 指向變量 a
(2)指針變量如何初始化?
float a,*p=&a;
或者
float a;
float *p=&a; //指針 p 與變量 a 的類型必須一致
(3)通過其他指針變量賦值
int i;
int *p1=&i,*p2;
p2=p1;
(4)給指針變量賦空值
p=NULL;
//當指針被賦值爲NULL時,指針不指向任何數據。
4.開闢動態存儲單元
(1)new運算符
【語法格式】new 類型名;
【語法格式】new 類型名[元素個數];
(2)delete運算符
【語法格式】delete 變量名;
【語法格式】delete []變量名;
(3)實例
int i=7,*p;
double *q;
p=new int[i+3]; //在內存中分配10個int類型的連續存儲單元塊
q=new double; //在內存中分配一個double類型存儲單元塊
……
delete q; //釋放double單元塊
delete []p; //釋放10個int類型連續存儲單元塊
5.指針運算符
(1)給p賦初值
int i=123,j,*p;
p=&i;
(2)怎麼通過指針取 i 的值,將其賦給 j ?
j=*p; //指針間接賦值,*p等價於變量i
j=*&i; //直接賦值,*&i等價於變量i
// * 和 & 都是單目運算符,具有相同的優先級,結合方向自右向左
(3)再來一塊代碼
p=&i;
printf("%d\n",*p);
j=(*p)++; //括號不能省略
// * 和 ++ 均爲單目運算符,結合方向自右向左,因此*p++ <=> *(p++)
(4)指針變量的值可以改變
int i=1,j=2,*p;
p=&i;
*p+=100;
p=&j;
(*p)--;
// *p 方式存取變量值是間接的,比直接存取一個變量更加費時。
通過改變指針的指向,增加程序設計的靈活性,使代碼更加簡潔、高效。
(5)等價語句
*p <=> i <=> *&i
&*p <=> &i <=> p
(6)實例
int *p;
p=new int; //開闢一塊動態存儲區,把其首地址賦值給p
*p=789;
//指針運算符“ * ”是單目運算符,乘法運算符“ * ” 是雙目運算符
(未完待續……)