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...