作者: shadowelly

[C] strtok 使用心得

[C] strtok 使用心得

這傢伙實在有點酷,用一般的常理去推測是不行的XD 當然有可能是我太憨,但是這個好用的東西是 

[C] fget 的換行小眉角

[C] fget 的換行小眉角

fget 其實很方便,但是如果真的用他來讀取一個檔案, 要小心他會在結尾處自己加上一個換行 

[C] const 和 pointer 使用的大亂鬥

[C] const 和 pointer 使用的大亂鬥

最近在看C的書,發現幾個問題很有趣,網路上文章眾說紛紜,
最後還是自己寫一個程式來測試最準確囉~

果真有很 “意外” 的收穫 🙂

const 這個修飾詞沒有很明確的定義,就像網路上的文章大多也不敢對他定義。
因為他的用法有點詭譎,只能是一種象徵的意味…

用我的理解他就像是一個限制器,
當你把他加在你的變數前面以後,這個變數就不能再更改了。
用const把一個變數定義為一個”常數” “不能更改的數值”

然後有趣拉,面試最愛考的pointer 和 const完美結合,
變成複雜到不行的大亂鬥。

有這三個情況…實在很難用言語形容他們,只好寫程式實驗驗證一下…
1.const int *ptr
這代表 ptr 是一個const int型態的指標,所以他的型態是cosnt int,代表這個指標指到的東西不能改了。
你不能(*ptr)++,也不能*ptr = 10;

2.int *const ptr
這整個指標是一個const ptr,我試著把他理解成int *(const ptr) 所以就像是這個指標不能改=這指標不能移動,
你不能ptr++ 也不能ptr = ?

3.int const *ptr
這最怪了,我以為他跟2應該是一樣的,結果他竟然是跟1一樣!!!
所以這也是代表指標指到的東西不能改,
不能(*ptr)++,也不能*ptr = 10;

#include <stdio.h>

int main(void){	
	int var = 10;
	//int * const ptr = &var; 
	//int const * ptr = &var;
	const int *ptr = &var;
	printf("wellytest begin var = %d\n", var);
	printf("wellytest begin var = %d\n", *ptr);
	//*ptr = 12; //改裡面的值
	//(*ptr)++; //改裡面的值
	ptr++; //改整個ptr的address
	printf("wellytest begin var = %d\n", var);
	printf("wellytest begin var = %d\n", *ptr);
	return 0;
}

為了追求更準確的答案,只用GCC來build
gcc -o testreult wellytest.c

這真的是很難…Orzzzz 不知道幾天後大概就又忘了吧-___-“

343 Views
Gmail 和 iphone(ipad) 聯絡人 雙向同步

Gmail 和 iphone(ipad) 聯絡人 雙向同步

之前有一種舊的方式可以同步Gmail聯絡人跟iphone 但是好像只是單向的,也就是說只能 

[Linux : Ubuntu] 修改network interface的識別名稱(eth0, eth1,….. etc)

[Linux : Ubuntu] 修改network interface的識別名稱(eth0, eth1,….. etc)

有時候Linux很聰明又很不聰明。 他似乎很努力想要讓你輕鬆的使用,所以自動幫你把driv