C語言中的初始化及記憶體配置

來源:互聯網
上載者:User

很多字串在用strcpy拷貝時會報錯或者直接賦值時會出現亂碼,都是因為沒有初始化。

char *str = (char *)malloc(sizeof(char));

memset(str,0,sizeof(char));即可

有時在編譯時間並不知道數組的長度,可以這樣動態分配數組

size = get_size();</p><p>int *p = new int[n];</p><p>for(int *q=p;q!=p+n;++q)</p><p>...</p><p>delete []p;</p><p>

一個自訂結構體的初始化

MYSTUCT mystr;

memset(&mystr,0,sizeof(mystr));

和下面皆可

MYSTUCT *mystr;

memset(mystr,0,sizeof(*mystr));

如果是二維的數組,在初始化時能否直接將聲明的二維數組的數組名傳遞給一個指標呢?編譯後就會發現是有問題的,一維數組的數組名即為指向該數組的指標,該指標值儲存了數組存放在記憶體中的一塊連續地區的起始地址,所以數組的下標就表示了這片記憶體地區的某儲存區相對於起始地址的位移量;而二維數組在概念上遠比一維數組複雜,或者說二維數組以一種晦澀的方式構建在一維數組之上。

之前在C++部落格裡看見過一篇文章,記了一點筆記如下:

   事實上,電腦系統的多維陣列其實最終還是以一維數組的形式實現的。就N x M的二維數組來講,設其數組名為array。指標array指向一個數組,該數組存放的是一系列指標,這些指標分別指向相應的一維數組,而這些數組中存放的才是我們的資料。

array -> [一維數組指標1] ->   [ 一維數組,M長]

         [一維數組指標2] ->   [ 一維數組,M長]

         ……           ……

         [一維數組指標N] ->   [ 一維數組,M長]

由此可見array是第i個指標變數地址,array[j]則表示相對於第i個指標變數位移 j*sizeof(數群組類型)。

系統通過這種機制訪問了該N*M維數組的第i行,第j列的內容。

 

所以,對於一個二維數組MYSTUCT mystr[N][M],就需要用數組指標或二維指標來表示了。

初始化的方法有兩種

MYSTRUCT **des = malloc(N*sizeof(MYSTRUCT*));

for(int i = 0;i<N;i++)

   des[i] = malloc(M*sizeof(MYSTRUCT));

下面這個例子是兩個一維指標對二維數組的操作

 void double_div()</p><p>{</p><p> int score[3][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};</p><p> int *p1,*p2;</p><p> int i;</p><p> for(p1=*score;p1<=*(score+2);p1=p1+4)/* score+i終究還是地址 */</p><p> {</p><p> for(p2=p1;p2<p1+4;p2++)</p><p> {</p><p> if(*p2<60)</p><p> {</p><p> for(i=0;i<4;i++)</p><p> {</p><p> printf("%d ",*(p1+i));</p><p> }</p><p> printf("/n");</p><p> }</p><p> }</p><p> }</p><p>}</p><p>

初始化之後的記憶體拷貝就簡單多了,利用函數memcpy,對象指標必須初始化。另外,通過記憶體拷貝對資料類型沒有約束,這也是下面一片文章說的CString轉char*能用CT2A宏的方法,如果用strcpy或直接=賦值都無法達到效果。

float a = 3.12;</p><p>float b = 0.0;</p><p>void *data;</p><p>data = malloc(sizeof(float));//4</p><p>memcpy(data,&a,sizeof(float));</p><p>memcpy(&b,data,sizeof(float));<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.