用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中給我們提供的關鍵字中的型別修飾符它們之間的關係。指標就是儲存位址的一種特殊變數。那這個變數跟我們的修飾符之間還有哪些更深層次的符號限制吶?我們在實際開發過程中,經常會運用修飾符,把指標的這種限制範圍更明確的告訴給使用者,通過不同修飾符告訴給...