指標2:指標與字串陣列
在oc中,指標與字串陣列的應用是真正需要掌握的知識點。
定義乙個字串,一般是通過定義乙個字元陣列來接收這個字串,例如: char a="it';輸出字串可以這樣操作: printf(「%s\n」,a)用%s來表示字串,並且s檢測的是對應的位址,然後輸出該位址儲存的值,而不是直接輸出值,因此可以直接寫對應字元陣列名即可。
還有一種定義方法是用字元指標變數來定義乙個字串,例如:char *p="it";,此時,指標變數p的值只是指向了字元『i』而已,即指向首字元的位址。而用指標定義字串,只能在宣告指標的同時定義字串,在宣告之後定義字串會產生錯誤。
然而,這兩種定義字串的方法是完全不同的,
在c中,記憶體分為5個大塊,1:常量區;2:堆;3:棧;4:?;5:?;
1:常量區:用於存放常量,常量去的變數值只能寫入一次,之後不可更改,並且還會快取起來,再次用到該常量時,還會返回同乙個值。
2:堆:用於存放物件。
3:棧:用於存放區域性變數,變數的值可以自由改動。
陣列存放在棧記憶體中,因此,用陣列定義的字串存放在棧記憶體中,可以隨意更改,而用指標定義的字串存放在常量區中,不可更改。
對於經常使用但是無需更改的字串可以用指標定義,可以節省記憶體空間提高效能,因為頻繁的開闢和消除記憶體空間是非常消耗效能的,而需要改動的字串必須用陣列定義
指標陣列,陣列中所儲存的元素都是指標變數,定義指標陣列和定義一般陣列都是一樣的: 資料型別 +陣列名,而指標的資料型別 是指向型別+*號,如下
char *point[100];
即定義了乙個指標陣列,而指標是可以定義字串的,因此指標陣列中的元素可以直接寫成:
char *p=
陣列中的每乙個指標都指向了乙個常量的字串,但要注意的是,輸出其中的字串內容是,在陣列名前不用在加上*號,直接寫陣列名加下標即可輸出對應字串,如
p[0]=abc,
因為在指標陣列中,存放的元素就是指標,不用再次說明,因此在輸出時,並不用再加上「*」號
如果寫成:*p[0]的話,會發生錯誤。因為對於指標陣列而言,每個元素的都是指標
對於需要改變的字串陣列,可以用普通的二維陣列定義法來定義,例如
char name[3][20],
該字元二維陣列可以存放3個字串,每個字串最多能有20個字元。
字串的輸入:對於字串的輸入,系統不能提前知道使用者將輸入多少個字元,只能規定最大輸入字元個數,因此,使用者輸入的字串是可變的,必須用字元陣列定義。
首先定義乙個字元陣列,
char a[2]
表示這個陣列可以有兩個字串,並不是說每個字串只能有兩個字元
然後用scanf函式進行輸入,使用scanf函式,系統會自動在最後乙個字元之後加上字串結束符「\0」,scanf也不限制輸入,但是輸出有限制。.
而使用gets()函式,則會不限制輸入的字元個數,儘管在定義陣列時有限制,但是在實際輸入中,不論輸入多少都能顯示,並且也會自動加\0.
但在實際使用中,多用gets()
指標與函式:
1.返回指標的函式
函式都可以有返回值,因此也可以返回乙個指標變數,返回型別在寫在函式名之前,例如 int function(),所以,返回指標的函式寫為
char *function(),
其中 char * 表示返回的型別,是乙個指標,指標即指向位址,所以返回的實際是乙個位址值。
2.指向函式的指標:
指標能夠指向函式,說明函式也有自己的位址值,因為函式是放在記憶體中的方法區中,這個知識點在oc中不常使用。
宣告函式指標的固定格式:
所指向函式的返回型別 (×p)(所指向函式的引數,引數變數名不寫),p表示指標變數名,可以任意取名,(*p)括號表示這個指標是指向乙個函式的指標,其實就是把函式名換成(*p)
賦值格式:
p=所指向的函式名;不用寫函式的引數
和陣列一樣,陣列名即位址,函式名也是位址
呼叫函式指標的方式:
(*p)(函式引數)=p(函式引數)=function(函式引數);
也和陣列類似。
c語言基礎2指標
指標的詳解 指標的定是 int a b 1 a b 可以看出來,a這個指標變數存的是b的位址。可以變形為int a b d 表示訪問位置100,並取得裡面的值。乙個常見的錯誤,int a a 12 但是a究竟指向 呢,由於我們沒有對a進行初始化,所以我們沒有辦法 12這個值究竟存在 如果變數是靜態的...
C 基礎總結 4 指標
指標是乙個變數,其儲存的值是位址,而不是值本身。有點類似於組成原理裡面的變址定址 在討論指標之前,我們先來看看如何尋找常規變數的位址。只需對變數引用取位址符 就行了。如下面一段 duck變數為int型變數,其分配的位址是1000,裡面儲存的值是12,而birding是乙個int型指標變數它本身的位址...
C 入門 2 指標
電腦程式在儲存資料時必須跟蹤以下3個屬性 include int main 輸出如下,顯示位址時,該實現的cout使用十六進製制法,因為這時常用於描述記憶體的表示法。a value 6 anda address is 0x7ffedf68996c b value 4.5 and b address ...