【C語言】指針初入(一)!

一、指針?啥玩意?

指針嘛?這玩意,還真挺難!每次編程序遇到指針時……

在這裏插入圖片描述

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;
//指針運算符“ * ”是單目運算符,乘法運算符“ * ” 是雙目運算符

(未完待續……)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章