今天在看程式的時候就發現乙個問題,就是我的另外的一篇文章裡面的乙個程式,就是那個發生段錯誤的程式裡面的。
裡面的一句就是給head初始化:struct film *head=null,而下面的對head的引用就是這麼用的:if(head=null),我就想了初始化應該是把整個值(*head)都給初始化了啊,怎麼是head啊,網上找一下就是了,其實很多的,牛人真的是多!
下面是我找到的人家的,用的是c++實現,其實很簡單,先看看吧。
int *p = null; char *p = null; 的問題
問題:void main()
輸出結果為:
0x00000000
0x0012ff7c
void main()
輸出:
報錯!中斷!
原因:cout << p << endl;
對於:
int *p;
//cout << p; 輸出的是p指標所指向記憶體單元的位址(當為int *p = null;時,p值為0)
而對於型別為:
char *p;
// cout << p; 輸出的是乙個字串,並不是p指標所指向記憶體單元的位址, 當為char *p = null;時,p值為0在c語言下面兩者是一樣的,c++下面二者輸出p的含義不一樣。
如何獲得 char *p = "test ";中字串「test」的位址呢? &p為指標在堆疊中的位址,cout << p;又不能輸出 "test "的位址,
方法:cout << (int)p;
再看乙個例子:
我自己編寫的乙個程式:
#include
int main()
一般的資料型別包括struct在內,如果直接賦值*head=null那麼就是給head賦值,注意了head是值,而不是(*head)的值。而這樣的初始化是賦初值,也是位址初始化吧。
記住一點,永遠不要給沒有初始化的指標賦值,指標的建立的時候賦值,使用的時候直接賦值的結果是很恐怖的,再看乙個程式:
#include
int main()
根本就沒有辦法除錯,會提示資訊,5 c:/code/1.c [warning] initialization makes pointer from integer without a cast ,但是可以通過除錯,執行一下就是錯誤的,這就對了,(*p)這種引用根本就是不對的,再看乙個程式:
#include
int main()
#include
int main()
就可以了,結果是:2293620,55從這裡可以曉得,對於指標的引用就是p(q)而不是(*p)。
1:可以在定義的時候:int *p=55,這個是賦初始值?這個是不對的,給指標賦值案下面2說的進行,也可以按照上面的給a的位址&a,可以用常量的位址不啊?不行的,比如&(55),我的理解是常量沒有位址;
3:對char *p=null可以用,但是引用p不出問題,引用*p就出問題那是因為在給p給定了0位址,卻沒有給值,自然會段錯誤,可以直接附乙個確定的字串,char *p=「adfdf」;使用*p得到的是a字元,這個在一般書的比較陣列和指標的部分都有講,而printf("%s/n",p);得到的是字串,printf("%d/n",p);得到的是頭位址。
4:對struct film *p=null;就是p=null,不是(*p)=null
xzvf的具體意思
x 解壓 z gzip壓縮格式 v 顯示詳細資訊 f file.tar 的引數.man一下.tar zxvf 目標壓縮包 z 將要解壓的包壓縮格式為 gzip格式 x 要執行的是解壓動作 與壓縮 c 相對 v 顯示解壓過程中的資訊 f 代表file 固定要帶的.也可以理解為有檔案要建立 解壓或者壓縮...
CI的具體意思
ci是英文corporate identity 的英文縮寫,直譯為 企業形象規範體系 這是指乙個企業為了獲得社會的理解與信任,將其企業的宗旨和產品包含的文化內涵傳達給公眾,而建立自己的視覺體系形象系統。ci由mi 理念識別系統 bi 行為識別系統 vi 視覺識別系統 三部分組成。如果說傳統企業 的是...
CI的具體意思
ci是英文corporate identity 的英文縮寫,直譯為 企業形象規範體系 這是指乙個企業為了獲得社會的理解與信任,將其企業的宗旨和產品包含的文化內涵傳達給公眾,而建立自己的視覺體系形象系統。ci由mi 理念識別系統 bi 行為識別系統 vi 視覺識別系統 三部分組成。如果說傳統企業 的是...