c 自學筆記007 指標及指標與陣列

2021-09-11 19:59:42 字數 2069 閱讀 2579

指標的定義及使用格式:

int num=0;

int *p = #

該段**定義了乙個指標p,並把它指向num的位址,實現原理是把num變數的位址作為p的值存放在p中。

一般格式為:資料型別 * 指標名;

以上為指標的定義。指標名是乙個識別符號,跟所有變數識別符號命名規則一樣。根據定義時的資料型別不同,指標同樣分為如整型指標,字元型指標,實型指標,等等型別。不同指標型別對應不同變數,即只能指向相對應資料型別的變數。

本質上,指標也是乙個變數,只是該變數的值是乙個位址,是它指向的目標變數的位址。另外一點,由於指標的值是記憶體空間的位址,用sizeof()函式可以發現,無輪定義指標時時實型,整型還是浮點型,指標的長度都為4,因為記憶體位址4個幾節足以儲存。這也是指標的特殊性之一。

指標的算術運算:

包括加減,自加,自減幾種。

指標的算術運算的結果是指標指向的位址相應移動乙個變數的位置。比如原指向乙個整型變數,則執行++運算後,指標指向的位址值將增加4,即4個位元組。以此推論,如果指標原指向乙個字元變數,++後,指標指向的位址的值只增加1。

//指標的算術運算

int a;

int *p=&a;

//p=&a;

char b;

void *p1=&b;

cout <

cout <

return 0;

執行結果為:

指標和陣列

指標和陣列什麼關係?據說是好**。學完指標,我對陣列的理解也更深刻了。

int a[5];

int *p=a;

cout << sizeof(p) << endl;

cout << p<< endl;

cout << a << endl;

最後一行**直接輸出陣列名a,我們會發現,a的值其實是乙個位址。。。事實上,a確實代表了陣列a的首位址(可以把陣列名看作乙個指向該陣列首位元素位址的指標,不過該指標是不可更改的,與指標變數是有區別的),陣列作為乙個連續空間記憶體的變數,又可以通過指標直接指向a的值(是不是像指標指向來指標),聯想到指標的算術運算,整個陣列用指標來操作實在是再方便不過了。。。

比如用指針對乙個空的陣列賦值:

int a[7];

int *p=a;

for(int i=0;i<7;i++)//此處直接把i的值依次賦給陣列元素

p-=7;//指標重新回到陣列首位

for(int j=0;j<7;j++)//輸出陣列

其它操作自行領悟。

注:指標是個好東西,也是個危險的東西。由於指標可以通過算術運算任意改變指向位置,一旦編寫時有邏輯錯誤,讓指標指向了它本不該指向的地方。此時若通過指標修改了對應位址的值,嗯。。。

一維陣列很好理解,計算機中一塊連續的記憶體空間,反應的也是一系列相同型別的資料。

先上**:

//二維陣列和多維陣列

int a1[5][6];//定義乙個二維陣列

int *p=0;//指標定義為空

int t=0;

for(int i=0;i<5;i++)//迴圈賦值

}for(int i=0;i<5;i++)//按行列列印看陣列賦值效果

{for(int j=0;j<6;j++)

{cout 可以發現,無論是一維陣列還是多維陣列,其元素的物理儲存方式均是線性連續的。

如何理解多維陣列?

我在除錯程式時,發現旁邊的列表幫我們很好的理解了多維陣列:

如圖,a1為二位陣列,a2是乙個多維陣列。二維陣列是元素為一維陣列的陣列,那麼三維陣列是元素為二維陣列的陣列,如此類推。。。多維陣列,無窮盡也。。。相當於n的n次方的n次方的n次方。。。

C語言(九) 指標(3)指標與const

表示一旦得到了某個變數的位址,不能再指向其他變數 int i 0 int const q i q是 const q 20 ok q error表示不能通過指標去修改這個變數 int i 0 int j const int p i const int p 等同於 int const p p 20 er...

自學C day11 指標

int a 10 int p a 初始化必須是用位址給它初始化 使用 p 250 指標的解引用 間接引用 p 將p 變數的內容取出,當成位址看待,找到該位址對應的記憶體空間 如果做左值 存資料到空間中 如果做右值 取出空間中的內容 void 萬能指標 泛型 指標的大小與型別無關,只與當前使用的平台架...

C基礎課程筆記總結7 指標2 指標與字串陣列

指標2 指標與字串陣列 在oc中,指標與字串陣列的應用是真正需要掌握的知識點。定義乙個字串,一般是通過定義乙個字元陣列來接收這個字串,例如 char a it 輸出字串可以這樣操作 printf s n a 用 s來表示字串,並且s檢測的是對應的位址,然後輸出該位址儲存的值,而不是直接輸出值,因此可...