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

時間 2021-08-30 09:31:59

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++學習經典,會幫助你掌握好的

你是如何鞏固基礎知識的

多複習一下,多翻一下書,閒著沒事的時候就看書。 達 多記多背,多看基礎知識,對於學習來說是非常重要的,只有掌握好基礎知識才能學習更高深的知識,平要努力,多花費一點時間 0920滅韓橙疚 基礎知識是非常重要的,因為他是一個打擊的東西,平時要多花點時間,每天睡前吃完飯吃完後之後在路上的時候都可以拿出來看...

計算機基礎試題,計算機基礎知識試題及答案

計算機的應用領域主要有 1.科學計算 或數值計算 2.資料處理 或資訊處理 3.輔助技術 或計算機輔助設計與製造 4.過程控制 或實時控制 5.人工智慧 或智慧模擬 6.網路應用 噢噢黃大明 如何利用計算機系統進行輔助決策 來了劉 所有行業?沒電腦什麼都不行啊 計算機基礎知識試題及答案 文庫精選 內...

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

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