指向字元的指標
指向字元的指標是乙個變數,用於存放字串的首位址。而字串本身是存放在以該首位址為首的一塊連續的記憶體空間中並以『\0』作為串的結束。字元陣列是由於若干個陣列元素組成的,它可用來存放整個字串。
賦值方法(字串指標方式和陣列方式):
char
str="i love china!";
char *str="i love china!";
char str1[40]="hello world!"; //這是初始化,並非賦值
只能對字元陣列的各元素逐個賦值,不能寫為:
char str1[40];
str1[40]="hello world!";
定義指標時,編譯器並不為指標所指向的物件分配空間,它只是分配指標本身的空間,除非在定義的同時賦值給指標乙個字串常量進行初始化。初始化指標時所建立的字串常量被定義為唯讀,存放在常量區,不可以修改字串的值。但是通過陣列初始化的字串則可以修改。
char * a = "hello";
&a 表示a的位址 ,a 是乙個指標, 這個指標指向的內容是char型別的, 所以這個指標的加減運算a+1 表示位址加1位元組。
char * a = "hello";
char ** b = &a;
b是乙個指標, 這個指標指向的位址儲存的是 char * 型別的資料。b + 1 表示位址加8位元組(64位系統)。
char *a[10] = ;
char *a
表示 a是陣列, 陣列中的元素是指標, 指向char型別
a表示a陣列第乙個元素儲存的位址。a+1是第二個元素位址。*(a+1)是第二個元素值。
&a也是陣列a所在的位址。等於a。
但是(&a)+1不等於a+1.因為a指向陣列第乙個元素,所以a+1指向第二個元素。而&a指向陣列,所以(&a)+1指向陣列最後乙個元素的下乙個元素。
*(a+1) 則表示a這個陣列的第二個元素的內容 (是個char 型別的指標)。
*(*(a+1))
則表示a這個陣列的第二個元素的內容(char指標)所指向的內容(字元)。
char a[2][10] = ;
char a[2][10] 表示乙個二維陣列, 儲存在最底層的元素是char。
char a[2][10] 中,a+$n 或者 & a[n] 表示 指向1維的第$n個元素的指標, *(a+$n)+$m 或 & a[n][m] 表示指向1維的第n個元素中的第m個元素的指標。
*(*(a+$n)+$m)
或者 a[n][m] 表示 1維的第n個元素中的第m個元素 的內容 。
&a 是乙個指標, 加1 將加整個二維陣列所佔空間,相當於加20位元組。
a 是乙個指標,加1 將加加1個1維元素所佔空間,相當於加10位元組。a+1與*(a+1)相等。
*a 是乙個指標 , 加1 將加加1個2維元素所佔空間,相當於加1位元組。
**a 不是指標,是char。
當char 作為函式的引數時,表示 char *,當作為函式的引數傳入時,實際上是拷貝了陣列的第乙個元素的位址 。
char * a 和 char a 都是指標, 指向char型別,char a 把內容存在stack; char *a 則把指標存在stack,把內容存在constants。
char * a[10] 和 char a[10][20]都是2級指標,a 表示一級指標,**a 表示記憶體中儲存的內容。char a[10],陣列由char * 型別的指標組成;char a [10][20] 表示一位放10個元素, 二維放20個元素, 值存放地是一塊連續的記憶體區域,沒有指標。
和*的數量對應, 如 char a的指標層數是2, 相當於char **a; char *a也是如此。
例題:
1.下述程式的輸出是__。
#include
int main()
; char **ptr = , ***p;
p = ptr;
++p;
printf("%s", **p+1);
return
0;}
解:
首先 s是乙個指標陣列, 存的是字串的首位址。 char **ptr 也是指標陣列,存放二級指標。p是乙個**指標,ptr這個二級指標陣列的陣列名也是乙個**指標。
p = ptr
++p
所以 *p = ptr[1] =s+2
**p =&(s+2 )= &」pink」
**p + 1 = &」ink」
結果為ink。
校招筆試複習 指標陣列與陣列指標
一 先看一組定義 1.乙個整型數 int a 2.乙個指向整型數的指標 int a 3.乙個指向指標的指標,它指向的指標指向乙個整型數 int a 4.乙個有5個整型數的陣列 int a 5 5.乙個有5個指標的陣列,該指標指向乙個整型數 int a 5 6.乙個指向有5個整型數陣列的指標 int ...
C語言複習 指標
程式設計練習 1.用指標實現報數問題 用指標的方法解決3人報數問題 include int main i k m 0 i是陣列計數,k是迴圈3次計數,m是退出的人計數 while m n 1 n是總人數,退出的人數要比總人數少乙個人結束迴圈 if k 3 i if i n 如果i到了成員最後,返回最...
c語言複習 指標
注 本文是對蘇小紅版c語言教材第9章的筆記 間接定址運算子 解引用運算子 e.g.int pa a 用於指標變數的定義 int a 0 printf a is d,a is p,pa is p,pa is d a,a,pa,pa 用於讀取指標變數儲存的位址對應的變數的值輸出結果 a與pa相同,a與p...