傳陣列到function的時候,function本身是不知道傳進來的Array
大小,所以要給下限值,因此當我們把Array傳進來時又要使用到
memset或是memcpy變成要注意我們要的個數。
其中memset:
The function stores (unsigned char)c in each of the elements of the array of unsigned char beginning at s, with size n. It returns s. 是用unsigned char 所以只有一個byte
一個byte去替換。
舉個例子:
把一個陣列或是記憶體空間全部清成0時,用memset來完成。
但這函式其實是先把數值轉成二進位再以bit的方式一一填入記憶體空間,
剛好0轉成二進位還是一堆0但是整數1其實就是轉成00000001在填入記憶體。
假設今天有個int test [2]的陣列要填入1的話,即memset(test,1,sizeof(test)),
而一個整數為4個byte就會發生以下這樣的事情
test[0] = 00000001 00000001 00000001 00000001 = 16843009(十進位)
test[1] = 00000001 00000001 00000001 00000001 = 16843009(十進位)
除了0填了還是0之外,還有⋯⋯-1可以使用,也就是填完之後還是-1
memcpy則要注意的是其原型
void * memcpy ( void * destination, const void * source, size_t num );
參數:
destination
Pointer to the destination array where the content is to be copied,
type-casted to a pointer of type void*.
source
Pointer to the source of data to be copied, type-casted to a pointer of type void*.
num
Number of bytes to copy.
大小,所以要給下限值,因此當我們把Array傳進來時又要使用到
memset或是memcpy變成要注意我們要的個數。
其中memset:
The function stores (unsigned char)c in each of the elements of the array of unsigned char beginning at s, with size n. It returns s. 是用unsigned char 所以只有一個byte
一個byte去替換。
舉個例子:
把一個陣列或是記憶體空間全部清成0時,用memset來完成。
但這函式其實是先把數值轉成二進位再以bit的方式一一填入記憶體空間,
剛好0轉成二進位還是一堆0但是整數1其實就是轉成00000001在填入記憶體。
假設今天有個int test [2]的陣列要填入1的話,即memset(test,1,sizeof(test)),
而一個整數為4個byte就會發生以下這樣的事情
test[0] = 00000001 00000001 00000001 00000001 = 16843009(十進位)
test[1] = 00000001 00000001 00000001 00000001 = 16843009(十進位)
除了0填了還是0之外,還有⋯⋯-1可以使用,也就是填完之後還是-1
memcpy則要注意的是其原型
void * memcpy ( void * destination, const void * source, size_t num );
參數:
destination
Pointer to the destination array where the content is to be copied,
type-casted to a pointer of type void*.
source
Pointer to the source of data to be copied, type-casted to a pointer of type void*.
num
Number of bytes to copy.
留言
張貼留言