2014年6月13日 星期五

記憶體與指標

int doses[] = {1, 3, 2, 1000}
int *t = doses;
//doses[3] == *(doses+3) == *(3+doses) == 3[doses]

//sizeof(doses) == 16

//sizeof(t) == 4(32bits) or 8(64bits)
//傳遞陣列變數給指標會發生退化(decay)

//不可做指標乘法但可以做指標加法


//使用fgets來取代scanf,因為fgets的function signature中,長度是必要項


//避免這樣的寫法 char *s = "Some string";
//改用這樣的寫法 const char *s = "Some string";
//因為字串 "Some string"本身存在於唯讀記憶體區段,好的寫法可以避免產生這種錯誤
//s[0] = 'S';

//declaration 宣告是一段程式碼,聲明某個東西(變數, 函式等)存在
//definition 一段程式碼

$(./bermuda | ./geo2json) < spooky.csv > output.json
//此命令利用管線(|)將行程(bermuda)的標準輸出連結到另一行程(geo2json)的標準輸入,並利用括弧將兩支獨立的程式當成單一程式,標準輸入的資料(spooky.csv)透過redirect standard input operator(<)來重導向至行程(bermuda),並且透過redirect standard output operator(>)來將行程(geo2json)之標準輸出導向檔案(output.json)。

FILE *in = fopen("i_dont_exist.txt", "r");
//Not Safety

FILE *in;
if (!(in = fopen("i_dont_exist.txt", "r"))){
  fprintf(stderr, "Can't open the file.\n");
  return 1;
}
//Safety

沒有留言:

張貼留言