1,指標
表示記憶體位址(指標指向了記憶體位址)
如果這個記憶體位址恰好是某個變數的位址,俺麼又稱「這個指標指向該變數」
只要在變數前面加上&,就表示變數的位址
2,指標變數
指標變數用來存放指標(位址)
⚠️:一般把星號放在資料型別之後(c++程式設計師),星號是型別的一部分。
給指標變數賦值的方式一般是把變數的位址取出來,然後賦給對應型別的指標變數。
eg,int a;
int* p=&a;
p儲存的是位址,*p是這個位址存放的元素;
指標變數支援自增和自減操作,對於int*型別的指標變數p來說,p+1是指p所指的int變數的下乙個int型別變數位址;
對於指標變數,把其儲存的位址型別稱為基型別,例如定義為int* p的指標變數,int就是它的基型別。
⚠️:基型別必須和指標變數儲存的位址型別相同,也就是上面定義的指標變數p不能存放double或char型別資料的位址,而必須是int型別資料的位址。
3,指標與陣列
陣列名可以作為陣列的首位址使用
eg,int a[10]=;
int* p=a;
a作為陣列a的首位址&a[0]而被賦值給指標變數p
由於指標變數可以進行加減法,即a+i等同於&a[i];
如果想要訪問其中的元素a[i],需要加上星號,使其變成*(a+i)後才和a[i]等價
輸入陣列元素的新穎寫法:
scanf(「%d」,a+i);
兩個int型別的指標相減,等價於在求兩個指標之間相差了幾個int
4,使用指標變數作為函式引數
這時視為把變數的位址傳入函式,如果在函式中對這個位址的元素進行改變,原先的資料就會確實地改變
在上述**中,把int型的指標變數p賦值為a的位址,然後通過change函式把指標變數作為引數傳入,此時傳入的其實是a的位址,在change函式中,使用*p修改位址中存放的資料,也就是改變了a本身,當最後輸入a時,就已經是改變了的值,這種傳遞方式被稱為位址傳遞。
⚠️:函式在接收引數的過程中是單向一次性的值傳遞。
只有在獲取位址的情況下對元素進行操作,才能真正地修改變數。
5,引用
引用不產生副本,而是給變數起了別名。
對引用變數的操作就是對原變數的操作。
引用只需要在函式的引數型別後面加上&就可以了。(一般寫在變數名的前面)
區分:引用:
1,在等號左邊
2,與型別在一起
3,定義的時候必須初始化
4,&後面跟的別名是新名字,之前不存在
1,在等號右邊
2,與變數在一起
3,&後面跟的變數,已經存在
eg,int a=3;
int &b=a; //引用
int* p=&a; //取位址
指標變數其實是unsigned型別的整數,因此為了理解方便,可以「簡單」地把*int型別理解為unsigned int型別,而直接交換這樣的兩個整型變數是需要加引用的
6,結構體的使用
結構體的定義:
格式struct name;
eg,struct studentinfoalice,bob,stu[1000];
結構體變數和結構體陣列,也可以按照基本陣列型別(如int型)那樣定義
studentinfo alice;
studentinfo stu[1000];
結構體裡面定義出了自身(這樣會引起迴圈定義的問題)之外的任何資料型別,雖然不能定義自身,但是可以定義自身型別的指標變數
eg,struct node;
7,訪問結構體內的元素
「.」操作和」->」操作
eg,struct studentinfostu,*p;
訪問stu中變數的寫法如下:
stu.id
stu.name
stu.next
訪問指標變數p中元素的寫法如下:
(*p).id
(*p).name
(*p).next
c語言中又有一種訪問結構體指標變數內元素的更簡潔的寫法:
p->id
p->name
p->next
也可以對結構體變數進行賦值:
stu.id = 10086;
int getid =stu.id;
建構函式是用來初始化結構體的一種函式,它直接定義在結構體中。
乙個特點是它不需要寫返回型別,且函式名與結構體名相同。
對乙個普通定義的結構體,其內部會生成乙個預設的建構函式(但不可見)
struct studentinfo
};如果想要手動初始化引數,只需要提供初始化引數來對結構體內的變數進行賦值即可。
struct studentinfo
};建構函式也可以簡化為一行;
struct studentinfo
};這樣可以在需要時直接對結構體變數進行賦值:
studentinfo stu= studentinfo(10086,」m」);
⚠️:如果自己重新定義了建構函式,則不能不經初始化就定義結構體變數(也就是預設的生成的建構函式 studentinfo() 已經被覆蓋了)
為了既能記不初始化就定義結構體變數,又能享受初始化帶來的便捷,可以吧」studentinfo(){}」手動加上
只要引數格式和型別不完全相同,就可以定義任意多個建構函式。
演算法筆記 心得6
1,指標 表示記憶體位址 指標指向了記憶體位址 如果這個記憶體位址恰好是某個變數的位址,那麼又稱 這個指標指向該變數 只要在變數前面加上 就表示變數的位址 2,指標變數 指標變數用來存放指標 位址 一般把星號放在資料型別之後 c 程式設計師 星號是型別的一部分。給指標變數賦值的方式一般是把變數的位址...
心得筆記 6
設定server 2008中isapi and cgi restrictions的方法 手動 1 iis manager 開 2 左側 viewer 名 ace ace administrator 3 右側 viewer iis isapi and cgi restrictions 4 表示 asp...
演算法筆記 心得2
1 轉義字元 n 代表換行 0 代表空字元null,其ascii碼為0 2 強制型別轉換 新型別名 變數 乙個型別賦值給另乙個型別,卻沒有寫強制型別轉換,編譯器會自動進行轉換。如果在計算過程中,需要轉換型別,就必須要寫強制型別轉換,因為不寫的話,就是算完才賦值。3 符號常量 替換 巨集定義 巨集替換...