C 初識指標

2021-09-26 09:33:29 字數 2560 閱讀 9342

定義乙個指標指向乙個變數的位址

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 指標

你可能一直有乙個疑問,計算在儲存資料時如何跟蹤這三個屬性 下面就來看看一種策略,它以指標為基礎,指標是乙個變數,其儲存的是值的位址,而不是值本身。在討論指標之前,我們看看如何找到常規變數的位址。只需對變數應用位址運算子 就可以獲得它的位置。使用常規變數時,值是指定的量,而位址是派生量。下面來看看指標...