C 動態開闢記憶體問題

時間 2022-03-01 09:35:26

1樓:沙支誇依

呵呵,我也來回答一下吧。樓主看著給幾分就行了。

如果要動態在堆中分配字串記憶體,用char *p = new char[字串長度+1];最後加的1是為了留給字串結束符'\0'。

char * p = new char;相當於定義了一個字元指標,並且給這個字元指標指向動態分配了的1位元組記憶體,這時你可以給*p='a'這樣的賦值。這可和char* p;是不同的,因為如果只是char * p;的話,只是定義了一個字元指標,而這個指標指向的記憶體單元地址是null,如果這時

你再*p='a';就會出錯,因為系統無法將字元'a'放入一個記憶體為null的地址空間中。

當在,像你說的p=str1;當然沒有錯。因為兩者都是指標,對應的物理原形都是32個bit,當然可以賦值成功的。呵呵!

2樓:匿名使用者

可以,但是在使用前需要用malloc分配記憶體

3樓:

可以,這樣是說明指標p指向一個char型別的數而不是char型別的陣列。

首先編譯的時候只是檢查型別匹配。

首先 char *p = new char ,而char *str1=new char[n]。

這兩個指標型別是相同的,自己體會一下

還有一個問題,

char *p = new char 是初始化,char *p; p = new char 是賦值操作。

兩者是截然不同的,初始化的效率比賦值操作要高。舉個例子,比如說你參軍。初始化就是你參軍的時候發軍服給你。

賦值就是你參軍的時候先隨便給你一件衣服,等某天再給你一件軍服。大概就是這個意思,我也是自己體會出來的,c++學久了,就明白了

4樓:匿名使用者

char * p = new char

相當於char * p = new char[1];

也就是說這個p只能當一個char用,不能當字串用,就好比一個char a[1]; 基本上沒什麼意義。

5樓:匿名使用者

new char的話,指標只指向一個字元.

另外,flashingair的解釋有點小問題.

char * p = new char

和 char * p = new char[1];

略有不同.區別在於,前者刪除時用delete p;後者用delete p;

c和c++不是強型別語言,對型別匹配的檢查是很寬鬆的.p=str1的話,p是char *型別,str1也是char *型別,因此就被認為是同型別的了,而不去管他們指向的內容是單個資料還是陣列.

char *p = new char 和 char *p; p = new char 在使用的效果上來說,沒有區別.如果硬要說有區別的話,前者是個宣告時初始化語句,後者不是.

問題一 char test是向記憶體開闢了位元組麼?問題二 位元組字元吧問題三 檔案中有如

什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何地址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體地址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的一個接一個的排放,這就是對齊。對齊的作用和原因 各個硬體平臺...

c怎麼讓陣列動態的分配記憶體來儲存

首先對於你的問題明確一下 第一 你是說自己寫一個動態分配的資料麼?如果是那樣的話,你使用c中malloc和realloc,然後使用free釋放,方法一樓已經說過,不多說了 你也可以使用c 中的new和delete,new和malloc基本差不多,但是new和delete是c 中的,對用類使用的話,n...

C語言中如何動態增加記憶體空間,C語言中,如何清空記憶體動態分配的堆空間?

有一個malloc函式,專門用來進行動態記憶體管理的 c語言中,如何清空記憶體動態分配的堆空間?c語言動態陣列如何擴充空間 c語言動態陣列擴充空間,主要是利用動態儲存分配庫函式來實現的,常用的有malloc函式和calloc函式。malloc 是c語言中動態儲存管理的一組標準庫函式之一。其作用是在記...