初識指標中的易混淆點

2021-10-17 20:54:35 字數 1475 閱讀 2447

1.指標和指標型別

我們都知道指標是乙個變數,是乙個存放位址的變數。既然如此我們為何不單獨定義乙個型別呢?而是要用其他型別加星號來作為指標變數,有什麼作用呢?

1.決定了指標的訪問許可權,也就是能訪問幾個位元組。

int

main()

通過除錯檢視記憶體,可以看出a的記憶體是

當*p等於0的時候記憶體的變化,記憶體塊裡的4個位元組全部變成0,

int

main()

而當使用char型別的指標時,同樣的位址,*p變成0之後,僅第乙個位元組變成0

由此可見,指標型別的作用有決定了指標的訪問許可權,也就是能訪問幾個位元組。

2.指標決定了加減所走的距離。

int

main()

;int

*p = arr;

int i =0;

for(i =

0; i <

10; i++

)for

(i =

0; i <

10; i++

)return0;

}

arr陣列中含有十個整型的空間,總共有40個位元組,由於是int型別的指標,每+1訪問4個位元組的空間,所以利用for迴圈可以填滿arr陣列。列印結果如下

int

main()

;char

*pc = arr;

int i =0;

for(i =

0; i <

40; i++

)return

0}

當我們用字元型的指標訪問時,乙個char型別訪問乙個位元組的內容,當我們填滿arr時,需要40次迴圈填滿。

2.野指標

概念: 野指標就是指標指向的位置是不可知的(隨機的、不正確的、沒有明確限制的)

1.指標指向的空間釋放

int

*test()

intmain()

這個test函式傳回來的位址沒有意義,因為a是我們建立的臨時變數,一旦脫離就消失了,所以這個p得到的位址指向的空間已經釋放,稱之為野指標。

2.指標越界訪問

這個就是我們平常的陣列,因為下標從0開始,所以定義陣列的時候,個數所在的位置不能使用,稱為越界。

3.指標的初始化

#include

intmain()

如果這樣寫是錯誤的,不能這樣寫。

指標的有效性

由於空指標不能訪問,所以在每次使用之前我們要保證指標不等於空指標的時候再訪問它,檢查指標的有效性。

numpy中的易混淆點

論numpy中matrix 和 array的區別 numpy matrices必須是2維的,但是 numpy arrays ndarrays 可以是多維的 1d,2d,3d nd matrix是array的乙個小的分支,包含於array。所以matrix 擁有array的所有特性。在numpy中ma...

mysql易混淆點

1 alter table 表名 change name names char 40 after 欄位名 改變位置放到字段之後 before 放到字段之前 2 查詢要攜帶索引字段,通常放在select之後第乙個 3 檢視檢視命令 show table status where comment vie...

易混淆 指標常量 常量指標

指標常量 可以這樣理解,把指標當成形容詞 那麼它就是乙個常量,只不過是指標修飾的。格式為 int const p 指標常量 例如 int a,b int const p a 指標常量 注意以下兩種操作 p 10 操作成功 p b 操作錯誤總結 因為是指標常量,說明指標變數不允許修改 即指向不可修改 ...