C語言(四 指標) 基礎不牢地動山搖!!!

2021-09-24 17:07:06 字數 3526 閱讀 9765

1、指標是什麼?

將位址形象化的稱為指標,

即位址就是指標,指標就是位址。

指標變數是變數 , 指標變數裡放位址。

2、指標定義

指標的定義方式是 type + *

3、指標+整數

type + *

指標加1,其實所加的是指標所指向type的大小 , 即 int *p  , p+1 = p +sizeof(type)  

指標加n,其實所加的是n倍的 指標所指向型別的大小

列:

int a = 10;

char cp = (char) &a;

int *ip = &a;

printf("%p\t",&a);

printf("%p\n", &a+1);

printf("%p\t",cp);

printf("%p\n", cp+1);

printf("%p\t",ip);

printf("%p\n", ip+1);

printf("%p\t",ip); // &a

printf("%p\n", ip+1);// int* 指向的是 int 型 ,所以 ip +1 = &a + 4

printf("%p\n", ipp+1); // int** 指向的是 int* ,所以 ipp+1= &ip +4

printf("%p\t",cp); // &a ,指標的大小為4個位元組,將 &a強制轉化為 char* ;

printf("%p\n", cp+1); // char* 指向的是 char 型 ,所以 ip +1 = &a + 1

printf("%p\n", cpp+1); // char** 指向的是 char* ,所以 ipp+1= &ip +4

4、指標的解引用

type + *

指標在節引用時,能夠指向位元組空間大小,由其所指向的型別決定

char * 所指向的型別是 char ,所以即使, cp 指向 a 的位址,

但在指標在節引用時,能夠指向位元組空間大小,由其char 型別決定,

即 , *cp 是 a 乙個位元組的內容(紅色標記)

大小端是以位元組為基本單位

數字有高權值位和低權值位之分, 位址有高位址位和低位址位之別

5、大小端 資料儲存方式

以位元組為單位,

將資料的高權值位放在高位址處,稱之為 小端,== 將資料的低權值位放在低位址處,稱之為 小端

將資料的高權值位放在低位址處,稱之為 大端 == 將資料的低權值位放在高位址處,稱之為 大端

相同為小,相異為大

int n = 0x11223344; // 以位元組為單位, n 的高權值位11, 在 記憶體位址的高位址處,為小端

char *cp = (char*)&n;

int *ip = &n;

//*cp 是 n 乙個位元組的內容,該資料儲存方式為 小端,所以 int n = 0x11223344 ,位元組位址最低位 為 44 ,即 n = 0x11223300

*cp = 0; // n = 0x11223300

*ip = 0;// n = 0x0000 = 0

6、 指標 - 指標 指標相減

兩指標相減,指的是兩指標之間所經歷元素的個數

該元素由兩個指標的型別所決定

兩指標相減,兩個指標指向同一段記憶體空間,同一種型別才有意義

int a[10];

int *ip = &a;//&a 到 &a[9] 相差36個位元組

int *iq = &a[9]; //指標的型別為int型 , 4位元組

char *cp = &a;// 指標的型別為char型, 1位元組

char *cq = &a[9];

short *sp = &a;// 指標的型別為short型, 2位元組

short *sq = &a[9];

printf("%d\n",iq-ip); // 36 / 4 = 9

printf("%d\n", sq-sp); // 36 / 4 = 18

printf("%d\n", cq-cp); // 36 / 1 = 36

7、指標的運算關係

#define n_values 5

for( vp = & values[n_values]; vp > &values[0]?

{*–vp = 0; //最後一次–vp 指向的是最後乙個元素之後的那個記憶體位置

// 當 vp 由n_values 減至 0 後,還會執行一次 vp-- , 此時,vp 指向的是第乙個元素之前的那個記憶體位置

for( vp = & values[n_values]; vp >= &values[0];vp–)

{*vp = 0;//標準不可行

標準規定:

允許指向陣列元素的指標與指向陣列最後乙個元素後面的那個記憶體位置的指標比較,

但是不允許與指向第乙個元素之前的那個記憶體位置的指標進行比較。

8、指標和陣列

指標和陣列沒有任何關係。只不過它們在元素訪問時,有一定的相似性。
9、二級指標

指標的定義方式是  type + *  

p = 100 // 指標變數 p = 100

*p = 100 // 指標指向的內容a = 100

pp = 100 // 指標變數 pp = 100

*pp = 100 //指標變數 p = 100

**pp = 100 // a = 100

*ppp = 100 // 指標變數 pp = 100

**ppp = 100 //p = 100

***ppp = 100 // a= 100

指標的定義方式是 type + *

指標大小為4,無論幾級指標,都是。

int ***p 所指向的型別為 二級指標 int** *p

int *****p 所指向的型別 四級指標 int**** *p

10、指標陣列

(1)什麼是指標陣列?

存放指標的陣列。
(2)什麼是陣列指標?

指向陣列的指標。
(3)是指標還是陣列由操作符的優先順序決定

int* arr[5];     // [ ] 的優先順序高於 * ,arr 先和 結合 , 此時為 指標陣列

int(*arr)[5]; // ()的優先順序 高於 , 使 arr 先和* 結合 ,此時為陣列指標

二維陣列傳參降維成一維陣列指標

int(*arr)[5] // 指向一維陣列的指標

// 指標陣列 的陣列

int (*arr[6])[5] // arr左右 ,[ ] 的優先順序高於 * , 先和 結合 , 此時為 指標陣列

// 陣列指標陣列的指標

int (*(*arr)[6])[5]

基礎不牢,地動山搖 K近鄰演算法 KNN

k近鄰是最為基礎的分類和回歸演算法!他的基本原則就是 對給定的訓練例項點和輸入例項點,首先確定輸入例項點的k kk個最近鄰訓練例項點,然後利用這k kk個訓練例項點的類的多數來 輸入例項點的類。簡單的說就是近朱者赤,近墨者黑。該點周圍的k個點絕大部分是紅色的,那麼它是紅色的概率也大。如果絕大部分是黑...

基礎不牢,地動山搖 最小二乘法

第一次聽到最小二乘法是在讀書期間,主要是用來應付期末考試。深入了解它是在擬合曲線的過程中,有的 對最小二乘法進行改進,增加了很多的正則項,以提高擬合度。總的來說,最小二乘法就是最一種數學優化技術。它通過最小化誤差的平方和尋找資料的最佳函式匹配。實現函式的擬合。比如下圖 可以通過最小二乘法計算出函式的...

時間複雜度的計算(基礎不牢,地動山搖)

if foundation is not strong,earth will move and mountain will shake.這個知識點開始沒有太重視,因為做題的時候,肯定會寫自己覺得最優最好的方法啊,就算計算複雜度,過不了,但是這已經是我能寫出的最好的方法了啊,計算了有什麼用呢?但是如果...