指標和陣列

2021-07-24 16:57:25 字數 1733 閱讀 2222

指標和陣列

(1)int *p;

把 p 稱為指標變數,p 裡儲存的記憶體位址處的記憶體稱為 p 所指向的記憶體。

即指標變數裡儲存的任何資料都被當做位址來處理。

乙個簡單的資料型別加上「*」就是乙個指標型別的模子,其大小是一定的,

與「」前面的型別無關。「」前面的資料型別只能說明指標所指向的記憶體

裡儲存的資料型別。32位系統下所有的指標型別大小都為 4byte 。

測試:sizeof(void *)

(2)「*」

使用指標時有「*」才能讀寫某塊記憶體。

(3)int *p = null 和 *p = null

int *p = null;//定義乙個指標變數p

通過編譯器知道p的值是0x00000000。其指向的記憶體裡面儲存的是int型別的資料,

在定義p的同時把p的值設定為0x00000000。這個過程叫初始化,在編譯的時候進

行的。

int *p;//定義乙個指標變數p。其指向的記憶體裡面儲存的是int型別的資料,

但是這個時候p本身的值是多少是不確定的。

*p = null;//給*p賦值為null,給p指向的記憶體賦值為null。但是由於p指向

的記憶體可能是非法的所以除錯的時候編譯器會報告乙個記憶體訪問的錯誤。

修改**:int i = 10;

int *p = &i;

*p = null;

在編譯器上除錯發現p指向的記憶體由原來的10變成0了;而p本身的值即記憶體位址並

沒有改變。

陣列相關的sizeof

int a = ;

printf(「%d\n」,sizeof(a));//16

printf(「%d\n」,sizeof(a+0));//4

printf(「%d\n」,sizeof(*a));//4

printf(「%d\n」,sizeof(a+1));//4

printf(「%d\n」,sizeof(a[1]));//4

printf(「%d\n」,sizeof(&a));//4 在不同平台上有不同結果

printf(「%d\n」,sizeof(&a+1));//4

printf(「%d\n」,sizeof(&a[0]));//4

printf(「%d\n」,sizeof(*&a));//16

char name = "abcdef";

printf("%d\n",sizeof(name[0]));//1

printf("%d\n",sizeof(&name));//4 在不同平台上有不同結果

printf("%d\n",sizeof(*name));//1

printf("%d\n",sizeof(&name+1));//4

printf("%d\n",sizeof(name+1));//4

printf("%d\n",sizeof(name));//7

printf("%d\n",strlen(name));//6

printf("%d\n",strlen(&name+1));//12

printf("%d\n",strlen(name+1));//5

&a 和 a的區別

int a[5];

int *p = &a;

int *q = a;

&a 得到陣列的位址,a 為陣列首元素的首位址,它們的值一樣但是意義不一樣

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...

指標陣列和陣列指標

理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...

指標陣列和陣列指標

該文時自己對指標陣列用法的一點總結,還望高手指點不足原文如下 由於以前對指標陣列不太明白,所以自己寫了 乙個小的測試程式來驗證了自己的猜測,先總結如下 指標陣列,由名字就可以知道的該陣列中的成員都是為指標的。其定義的方法為 char p 5 該初定義乙個包含5個char 型別的陣列的指標,由於p本身...