2012年1月2日 星期一

C about -- memset(matrix, 0, sizeof(matrix))

可以用於陣列初始化:
例如: 宣告三個陣列
#define MAXSIZE 8

int map[MAXSIZE+1];
int left[2*MAXSIZE+1];
int right[2*MAXSIZE+1];

 方法一
    memset(map,  0, sizeof(map));
    memset(left, 0, sizeof(left));
    memset(right,0, sizeof(right));

 方法二     
    memset(map,  0, sizeof(int)*(MAXSIZE+1));
    memset(left, 0, sizeof(int)*(2*MAXSIZE+1));
    memset(right,0, sizeof(int)*(2*MAXSIZE+1));

需要注意的是 ,不可以使用memset初始化為1

memset(matrix, 1, sizeof(matrix)); //會失敗
memset(matrix, -1, sizeof(matrix)); //OK
memset(matrix, 0, sizeof(matrix));//OK

memset為字元填入的函式,整數由2或4個位元組(字元)組成
設定的值是0x01,但存入的值卻是0x0101,而導致錯誤的答案
而-1則是0xFF,存入的值是0xFFFF,不會影響答案

#include <stdio.h>

int matrix[5][5];

void init_matrix()
{
  //設定陣列內的值全為-1
  memset(matrix, 1, sizeof(matrix));
}
int main()
{
    int i,j;
    init_matrix();
    for(i=0;i< 5;i++){
       for(j=0;i< 5;i++)
         printf("matrix[%d][%d] =%d\n",i,j,matrix[i][j]);  
    }
    system("pause");

沒有留言:

張貼留言