我們都知道指標是用來操作記憶體空間的,我們可以簡單的拿來改變某個變數的值
如:我們定義乙個int a = 5;
然後定義乙個指標int *p;
將change(&a);利用這個呼叫函式change();
用函式int change(int *p)
輸出結果會是:a = 10;
這就是利用乙個簡單的指標來改變了記憶體空間的值將5 改成了10,這就進一步說明指標是用來改變記憶體空間的值的。
接下來我們討論*p,與**p的問題
很容易理解:*p是指標,**p是指標的指標嘛,是的,但我們要知道,第乙個*p是拿來改變某乙個記憶體空間的值的
如剛講的記憶體空間a一樣,而**p 是改變指標的指標的記憶體空間的,即改變指標的指標的指向問題,因為改變的是
該指標的的記憶體的值,即,指標的指向問題就改變了,當我們申請記憶體空間的時候會遇到兩種情況:
*head:
head = (slnode*)malloc(sizeof(slnode));
**head:
*head = (slnode*)malloc(sizeof(slnode));
這兩種情況不一樣,第一種情況,你若使用在初始化函式中,你需要return head;這樣你才能獲得該位址;而
第二種情況就不用了因為你操作的是*head這個位址空間,改變了其值,使其指向改變,但你仍然知道你傳入
的位址,這樣你就可以繼續找到,操作該空間了。
下面舉了乙個例子:
#include
using namespace std;
int change(int **p,int *p2)
int main()
this指標的問題
let宣告變數會形成塊級作用域,且不存在宣告提公升,而var存在宣告提公升。所以當使用let宣告變數時,不存在宣告提公升,length屬性實際上並沒有新增到window物件中。從下面的例子可以看出 是不是奇怪為啥輸入 fn,1 兩個引數,是不是賊奇怪為什麼不是10和5或者5和5?哈哈,慢慢解釋。最先...
指標的指向問題
最近開始複習資料結構,寫了個測試程式時發現了乙個問題。typedef struct lnode lnode,linklist int main lnode l initlist l void initlist linklist pl pl linklist malloc sizeof lnode p...
指標 1的問題
指標 1 並不是指標代表的位址值 1.char a a char p a cout void p void p 1 輸出 0012ff33 0012ff34 p指向的是乙個字元,p 1就是移動乙個字元大小,乙個字元就是乙個位元組,所以p 1 代表的位址就比 p 代表的位址大1。int i 1 int...