體驗C語言記憶體操作的魅力之范型

2021-06-08 20:13:00 字數 1140 閱讀 4520

用c語言來實現堆疊的范型,體驗c語言的真正魅力。相比c++裡的范型,用c語言實現感覺更真切,更踏實,同時體會到了對記憶體把控的快樂,我想再這樣下去我會上癮。這裡面唯一要說的兩處:分別是realloc和程式第28行。

realloc在分配記憶體時,如果指標先前分配的記憶體範圍後有足夠的未分配的記憶體,則在末尾直接加上需要擴充套件的記憶體,反之分配一塊新的記憶體,將之前的字元拷貝進去。對應圖二和圖一。

第28行比較難理解的是,要改變指標指向位址的內容,需要將值複製到指向的記憶體位址。對應圖三。

#include #include #include #include #define base_length 4

typedef structstack;

void stacknew(stack* s, int size)

void stackpush(stack* s, void* element)

void* next = (char*)s->elements + s->pos;

memcpy(next, element, s->elementsize);

s->pos += s->elementsize;

}void stackpop(stack* s)

s->pos -= s->elementsize;

}void stackfree(stack* s)

int main()

double *arr = s.elements;

printf("\nafter push the num is:");

for(i = 0; i < s.pos/sizeof(double); ++i)

/*-------test stack pop------*/

stackpop(&s);

printf("\nafter pop the num is:");

for(i = 0; i < s.pos/sizeof(double); ++i)

stackfree(&s);

return 0;

}

程式編譯環境是gcc version 4.2.1。全文完。

C語言記憶體操作函式的實現

memcpy void memcpy void dest,const void source,size t num 1 函式memcpy從source的位置開始向後複製num個位元組的資料到dest的記憶體位置。2 這個函式在遇到 0 的時候並不會停下來。3 如果source和dest有任何的重疊,...

c語言中的記憶體操作函式

int arr 20 再定義並初始化的時候可以這樣操作 arr 20 不能這樣修改陣列的值。語法錯誤。int str 20 將一塊記憶體初始化乙個值 memset arr 0 sizeof arr 第乙個引數表示初始化位址,第二個引數表示初始化值,第三個引數表示初始化記憶體大小。memcpy arr...

嵌入式C語言記憶體操作之C語言指標修飾符

在我們了解了指標的基本概念之後,接下來我們來看一下指標和c中給我們提供的關鍵字中的型別修飾符它們之間的關係。指標就是儲存位址的一種特殊變數。那這個變數跟我們的修飾符之間還有哪些更深層次的符號限制吶?我們在實際開發過程中,經常會運用修飾符,把指標的這種限制範圍更明確的告訴給使用者,通過不同修飾符告訴給...