陣列和指標

2021-07-09 04:27:52 字數 3198 閱讀 5937

1、如何將數值儲存到指定的記憶體位址上?

int *p = (int *)0x12ff7c;//將位址0x12ff7c強轉成int *,賦給指標p

*p = 0x10;//將10儲存到位址0x12ff7c上

2、int *p = &p;//將p指向了自身 位址p處 儲存 &p。圖1

*p =null;//對p指向的記憶體位址空間賦值null。圖2,賦值完後變成p =null,及p指向空

圖1圖2

char *p = &p;//假設 &p = 0x12ff7c

*p = null;//將p指向的空間記憶體,賦值空

指標占用4位元組如下圖所示:

由於p是個char指標,*p只能改變1個位元組。

所以*p =null後。p = 0x12ff00

3、陣列名與指標

3.1 陣列名作右值時作指標用,指向首元素首位址。

3.2 在以下兩種情況下,陣列名做陣列用

3.2.1 sizeof(陣列名):sizeof()求的是變數型別所佔的記憶體長度

int a[5];a的型別為int [5],是乙個陣列,所以sizeof(a) =5 * sizeof( int )

3.2.2&a+1,指標加減移動的是元素個數,先弄清指標代表的含義。

int (*p) [5];

int a[5] ;

a是乙個列指標,對列指標取&,將變成行指標。即&a的型別 = p。所以&a+1 = p+1;

同理,對行指標取*,行指標將變成列指標,(*p+1) = a + 1;//指向第2元素

4、陣列指標與指標陣列

int *p[10] -[ ]優先順序高於*,所以p先與[ ]結合,組成一陣列p[10]。陣列的成員型別是int *,即成員都是指標,所以這個表示式是指標陣列。

int (*p)[10]-( )優先順序高於[ ],所以p先於*結合,表示乙個指標。那是什麼指標型別?指標指向int [10]是一陣列,即表示一指標指向一陣列,陣列指標。

5、二維陣列與二級指標

5.1二維陣列,可以理解為一維陣列,陣列元素又是乙個陣列。如下:

a[i][j] =*((* (a+i)+j),a為陣列首元素首位址,a+i表示移動i個陣列元素=a[i],a+i表示行指標,*(a+i)轉為列指標,a[i][j]位址為*(a+i)+j(列指標移動j個元素)

5.2 二維陣列賦值:

int a[3][2] = ;//1式

int a[3][2] = ,, };//2式

以上兩個資料賦值有什麼區別?

1式賦值是逗號表示式,取逗號後的值,所以1式表達結果為a[3][2] = ;

2 式賦值用{}表示乙個整體,起打包隔離外界作用

5.3 二級指標

獲取二級指標流程(如int **p) 

1、先得到p的記憶體位址

2、用取值符*開啟這個記憶體,取出它裡面包含的位址值,即*p

3、再次用取值符*,開啟*p的記憶體所包含的值

6、陣列和指標作函式引數時

6.1、一維陣列作函式引數時,編譯器把陣列解析成乙個指向陣列首元素首位址的指標(陣列轉為指向首元素首位址的指標)

int fun(int p[ ]) = int fun(int *p)  // p = &p[ 0]

6.2不能把指標變數本身傳遞給乙個函式,函式用的只是實參的乙個拷貝而已

void getmemory(char *p,int num)

// p = (char *)***xx;  指標的型別強制轉化,將整型***xx強制為char ×指標,malloc返回起始位址

p =(char *)malloc(num*sizeof(char));//p處理的只是形參,實參的拷貝而已

}int main()

char *str =null;

getmemory(str,100);//將指標str傳遞給函式,但是函式處理的只是實參的拷貝。

strcpy(str,"hello"); //段錯誤

6.3如果想在呼叫函式裡改變實參的值,只要傳入的是實參的位址就可以。通過指標改變其指向的值

void getmemory(char **p,int num)

*p =(char *)malloc(num*sizeof(char));//char **p = & str ->*p = str

}int main()

char *str =null;//如果要改變str只要傳入&str就ok

getmemory(&str,100);//

strcpy(str,"hello"); //

陣列指標和指標陣列

陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...

陣列指標和指標陣列

一 定義 陣列指標 陣列指標 是指向陣列 首元素的位址的 指標,其本質為指標 這個指標存放的是陣列首位址的位址,相當於2級指標,這個指標不可移動 指標陣列 陣列元素為指標的陣列,其本質為陣列。二 舉例 int a 3 4 這個無需多說,就是乙個 二維陣列 int p 4 就相當於int p 4 它就...

陣列指標和指標陣列

這兩個名字不同當然所代表的意思也就不同。我剛開始看到這就嚇到了,主要是中文太博大精深了,整這樣的簡稱太專業了,把人都繞暈了。從英文解釋或中文全稱看就比較容易理解。指標陣列 array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標 陣列指標 a pointer to an ar...