指標的初始化和一些常見型別的指標

2021-09-19 15:37:34 字數 2025 閱讀 1554

指標初始化時,「=」的右運算元必須為記憶體中資料的位址,不能夠是變數,

int*p=0;除外,該語句表示指標為空。

在編譯過程中,不能通過對沒有初始化的指標的引用,

沒有初始化的指標,簡稱野指標,可能會亂指,指向一些無關緊要的區域問題是不大的,但是,如果指向一些重要的記憶體區域,就可能引起資料丟失。試想一下,你去遛狗,溜的乙隻是乙隻沒經馴養的野狗,乙隻是被調教極好的貴族狗,哪個安全一點呢。

ex:典型不能通過的錯法:

int *p;

p=13;

沒有初始化,野狗,可能會咬傷程式。

聊聊字串和指標之間。

正確的初始化:

char *a="cxk";
這個初始化過程,是將指標a指向字串的首位址,而並非傳遞字串的值。由於,

在c語言裡面,沒有總體處理乙個字串的機制.

正確的賦值:

a="cxk";
錯誤的賦值:

*a="cxk";
字串常量傳遞的是它的首位址,不能夠通過*a改動該字串的值,

由於該字串為常量,而它僅僅是簡單的將指標指向該字串常量

3、指標常量

在c語言中沒有一種內建(built-in)的方法去表示指標常量,所以當我們使用它的時候通常先寫成整型常量的形式,然後再通過強制型別轉換把它轉換成對應的型別,如:int * , double * , char *等。

所以後面所看到的的做法是不行的: int *p = 0x12345678 ; 正確的方式應為:int *p = (int *) 0x12345678; 要注意指標中僅僅能存放位址,不能將乙個非0值整型常量表示式或者其它非位址型別的資料賦給乙個指標,原因就在此。

在大多數計算機中,記憶體位址確實是以無符號整型數來表示的,並且多以16進製表示,但我們在c語言中不能用整型數去表示位址,僅僅能用指標常量來表示,由於它是被用來賦給乙個指標的。

對於這個賦值問題還能夠換乙個角度去理解,在c語言中,使用賦值操作符時,賦值操作符左邊和右邊的表示式型別應該是同樣的,假設不是,賦值操作符將試圖把右邊表示式的值轉換為左邊的型別。所以假設寫出int *p = 0x12345678 ; 這條語句編譯器會報錯:

』=』 : cannot convert from 』 const int 』 to 』 int * 』 ,

由於賦值操作符左邊和右邊的表示式的型別應該同樣,而0x12345678是int型常量,p是乙個指向int型的指標,兩者型別不同,所以正確的方式是:int *p = (int *) 0x12345678 ;

前面也說了,可以給些位址的常量賦值給指標的,(標重點:好像要是十六進製制才行!)

ex:乙個指標常量賦給乙個指標,如:long *p = (long *)0xfffffff0;

實質:

對指標進行初始化或賦值的實質是將乙個位址或同型別(或相相容的型別)的指標賦給它,而無論這個位址是怎麼取得的。要注意的是:對於乙個不確定要指向何種型別的指標,在定義它之後最好把它初始化為null,並在解引用這個指標時對它進行檢驗,防止解引用空指標。另外,為程式中不論什麼新建立的變數提供乙個合法的初始值是乙個好習慣,它能夠幫你避免一些不必要的麻煩。

4.指標的指標

這個也是不難理解滴!

指標是一種變數,它也有自己的位址,所以它本身也是可用指標指向的物件。

我們能夠將指標的位址存放在還有乙個指標中。

也就是說,可以這樣看,

指標原來存的的是乙個變數的位址,

指標原來的位址,

存到另外乙個指標去。

因為指標也是乙個變數。

int i;

int *p,**pp;

p=&i;

pp=&p;

這個時候,要引用i的值,

可以

*p

**pp

指標的初始化

指標代表的是記憶體單元的編號或位址,通過指標就可以找到對應的記憶體單元。對指標進行初始化或賦值的實質是將乙個位址或同型別 或相相容的型別 的指標賦給它,而不管這個位址是怎麼取得的。1 指標的初始化 指標初始化時,的右運算元必須為記憶體中資料的位址,不可以是變數,也不可以直接用整型位址值 但是int ...

指標的初始化

下面的函式有什麼錯誤 int square volatile int ptr 這段 的目的是用來返指標 ptr指向值的平方,但是,由 於 ptr指向乙個volatile型引數,編譯器將產生類似下面的 int square volatile int ptr 由於 ptr的值可能被意想不到地該變,因此a...

指標的初始化

1.字元指標的初始化 在c語言中 string 儲存的就是首個字元所在的位址 所以可以把 字串常量 string 賦值給指標 char p p string 但不能把字串常量直接賦給陣列,需要用到 strcpy。但可以對陣列初始化為字串,也就是字元陣列。如 char str string 兩種初始化...