定義乙個指標指向乙個變數的位址
type * p = &var;
int i;
int*p =
&i;// 通過*p讀寫i的值
*p =10;
int a =
*p;
用乙個指標指向另乙個指標
的位址,不管幾級指標都是指標.
type ** q = &p
;
char
*p =
"abc"
;char
**q =
&p;// 讀取二級指標的值
printf
("%s \n"
,*q)
;// 等價於
printf
("%s \n"
, p)
;
常量指標一但初始化(必須初始化)就不能再改變指標的指向
但可以修改所指向記憶體的內容
(前提是該記憶體可以被修改)。
const type * p = &var;
type const * p = &var;
int a =
100;
const
int*p =
&a;// 等價於
intconst
*p =
&a;*p =20;
// ok
int b =10;
p =&b;
// error
被指標常量修飾的指標不能通過該指標
修改所指向的記憶體,但可以修改指標的指向
。
type * const p = &var;
int a =10;
int*
const p =
&a;*p =12;
// error
int b =
100;
p =&b;
// ok
參考1指標陣列也是乙個
陣列
,操作方式與陣列相同。只不過每個元素為指標型別
。
type *p[n]
char
*p =
;// 讀
int len =
sizeof
(p)/
sizeof
(p[0])
;for
(int i=
0; i)prinft
("%s \n"
, p[i]);
// 寫
for(
int i=
0; i) p[i]
="911"
;
陣列指標也是一種指標,同樣只占用4個位元組,與普通指標沒什麼兩樣。
type (*p)[10] = &typearr;
int arr[10]
=;int(
*p)[10]
= arr;
// 1
int(
*p)[10]
=&arr;
// 2
int(
*p)[10]
=&(arr[0]
);// 3
// 讀
printf
("%d \n"
, p[1]
);printf
("%d \n",*
(p+1))
;// 寫
*p[0]=
10;
char
**p =
null
;// 分配p的空間
const
int n =3;
*p =
(char**
)malloc
(n *
sizeof
(char*)
);// 為p中的每個元素分配空間
// 每個元素分配 50 byte
const
int strsize =50;
for(
int i=
0; i) p[i]=(
char*)
malloc
(strsize *
sizeof
(char))
;// 使用...
strcpy
(p[1],
"abcd");
// 釋放空間
// 由內向外, 先釋放低維(陣列維度)空間
for(
int i=
0; i)// 再釋放高維空間
free
(p);
p =null
;
C指標初識
指標是乙個變數,其值為另乙個變數的位址,即,記憶體位置的直接位址。就像其他變數或常量一樣,您必須在使用指標儲存其他變數位址之前,對其進行宣告。指標變數宣告的一般形式為 type var name 在這裡,type是指標的基型別,它必須是乙個有效的 c 資料型別,var name是指標變數的名稱。用來...
初識C指標
什麼是指標?type var name int a 乙個整型的指標 double b 乙個 double 型的指標 float c 乙個浮點型的指標 char ch 乙個字元型的指標 所有實際資料型別,不管是整型 浮點型 字元型,還是其他的資料型別,對應指標的值的型別都是一樣的,都是乙個代表記憶體位...
初識C 指標
你可能一直有乙個疑問,計算在儲存資料時如何跟蹤這三個屬性 下面就來看看一種策略,它以指標為基礎,指標是乙個變數,其儲存的是值的位址,而不是值本身。在討論指標之前,我們看看如何找到常規變數的位址。只需對變數應用位址運算子 就可以獲得它的位置。使用常規變數時,值是指定的量,而位址是派生量。下面來看看指標...