c指標如何使用及基礎知識

2021-08-19 16:30:22 字數 2774 閱讀 5734

1樓:黃邦勇帥哥哥

第1題:

people *pp;

pp->name="zhangsam"; //這樣肯定錯誤,結構體型別指標變數pp未初始化,也就是說這時結構體型別的指標變數pp沒有指向任何記憶體地址,你就使用他了,肯定錯誤。

people *pp1= new people; //new表示為指標pp1動態分配一個記憶體地址。

pp1->name="zhangsam"; //這裡不會出錯,建設你把pp改個名字,就改為pp1吧,不然會變數名相同而出錯。

delete pp1;

第2題:

int *height;//提示未初始化很正常,因為你這裡定義的是int型變數指標,而你在下一句卻給這個指標賦予一個字串常量地址,很明顯型別不皮配,這個指標所以賦值根本就不成功,當然不會初始化。

//height="168"; //這是錯誤的

int a=1;

height=&a; // 修改為這樣就行了。

第3題:

string abc;

char *bbc;

abc=bbc;//若兩個變數都沒有值的話,不報錯是不可能的。

你可能要問的是下面這種情況

string abc="kkk";

char *bbc="eee";

abc=bbc; //原因很簡單,因為在c++中string是一個類,注意是一個類,也就是string是使用class這樣來建立的,因此在string類中是過載了賦值運算子=的,因此這條語句就不會有錯,有可能過載的賦值運算子的形參就是char *型別的,具體內容就參看c++中string類的原檔案吧。

第4題:

char *tmp=&"hello world!"; //咋可能沒有用處,你這樣是100%錯誤的,如果編譯器不報錯,說明你的編譯器有毛病。

char tmp=&"hello world!"; //這樣正確,修改為陣列

char (*tmp)[13]=&"hello world!";//這樣也正確,修改為陣列指標。

分析:&"hello world!";

首先"hello world!"在進行初始化時代表的是這個字串的地址,我們平時所說的地址並不是這整個字串的地址,而是指的他的第一個字母h的地址,而再對"hello world!"取一次地址,就表示這個地址代表的是擁有整個13個字元(包括最後的結束符)的字串的地址,這時這個地址相當於是一個擁有13個元素的一維陣列的地址,注意是整個一維陣列的地址而不是陣列中第一個元素的地址,因此要接收&"hello world!

";這樣的地址,那麼指標必須是一個指向擁有13個元素的一維陣列的地址的指標,即陣列指標。或者乾脆定義一個有13個元素的一維陣列來容納這13個元素也可以。

第5題:

用char *有用char*的好處,用string有string的好處,但要記住的是,在使用string時,string是c++中的一個類,他和普通的類沒啥區別,也就是說string類有他的成員函式,成員變數,還有他過載的操作符函式,使用string s;這樣的話句建立的是一個string類的物件,這個物件可以呼叫string類中的成員變數,成員函式,過載的成員操作符(當然要公有的才行)

2樓:極天異雲

1.pp->name="zhangsam"//這樣會崩潰 因為沒有初始化

pp->name="zhangsam"//出現完全不一樣的崩潰方式,為何

這裡是因為string沒有初始化過(作為struct的成員變數不會自動呼叫建構函式),就直接呼叫了=運算子函式當然出錯。

2.未初始化應該只是一個警告,不必理會。

3.這裡和第一題相反,已經初始化過了,所以再次賦值有效。

4.&確實可有可無。

5.c++用char *也很多,有些地方不適合傳入string, 尤其是和系統api相關的呼叫必須試用char *.

3樓:匿名使用者

1:先說結構體

typedef structpeople;

people *pp;

pp->name="zhangsam"//這樣會崩潰//pp是一個結構的指標,並沒有實體的物件,所以結構裡的所有陣列也沒有實體化.自然呼叫會漰

people *pp= new people;

pp->name="zhangsam"//出現完全不一樣的崩潰方式,為何//這樣應該是不會崩潰的,不過這句好像後面少了個分號

delete pp;

2:int *height;//提示未初始化,是否所有定義都應該初始為null?//所有指標在申請時如果沒有初始化指向一個地址,最好將其設定為null

height="168";

3:string abc;

char *bbc;

abc=bbc;//為何不報錯?//因為string字串返回的是字串首個下標的地址.

4:char *tmp=&"hello world!";//這是不是很搞笑,&是否無關緊要//是無關緊要,因為這裡的字串是一個放在文字常量區的常量字串,他返回一個首下標地址,而不是一個指標,所以不可能再向下取址

5:c++裡用char *多嗎,我個人喜歡string,總感覺char *是c裡的內容//不少,char*還是很有用的,不過string確實很方便

時間太久沒接觸c++了忘差不多了,以前也是一隻半解,期待高手解答

4樓:傲月

像這種學習基礎知識的問題,在網上以提問的方式,往往會因為各種限制導致回答不全面,從而導致你的理解不全面或者不透徹,對於你以後的學習可能會造成不良影響,建議你看相關書籍,推薦c++ primer ,c++學習經典,會幫助你掌握好的

如何學習會計基礎知識

一 會計的概念 會計是指以貨幣為主要計量單位,運用一系列專門方法,核算和監督一個單位經濟活動的一種經濟管理工作。二 會計的基本特徵 1 會計以貨幣作為主要計量單位 2 會計擁有一系列專門方法 3 會計具有核算和監督的基本職能 4 會計的本質就是管理活動 會計與經濟社會密切相關,並隨著經濟社會的發展而...

《公共基礎知識與能力素質》如何複習

公共基礎知識與能力素質 在題目型別上其實和 行測 與 申論 差不多,只不過是放在了一套卷子裡,題量也要少很多,包括單選 多選 公文改錯 材料分析等等,有時候還有填空題,這類教材像中公 華圖之類的教育機構應該是能買的到的,你截圖的這個就是公共基礎知識相關的內容,類似於 行測 的常識那一部分,你有考公務...

如何加強中小學體育基礎知識教學

筆者在基層任教十餘年,教學中常遇到學生對體育教學內容理解不透徹,抓不住內在聯絡,嚴重影響教學效率的提高,阻礙了教學進度計劃的正常實施。經總結髮現,往往是由於學生缺乏體育基礎理論知識所致。中小學體育課教學,增加基礎理論 動作技術結構 運動生理學和解剖學等內容的學習,不僅可以提高學生參加體育活動的自覺性...