c語言讀書筆記
阿新 • • 發佈:2019-02-13
c語言知識
引自《c專家程式設計》
1.c語言資料型別
short -- short int(短整型)
long -- long int(長整型)
2.switc 中的 break 到底中斷了什麼?
switch(line) {
case THING1:
doitl1();
break;
case THING2:
if (x == STUFF) {
do_frist_stuff();
if (y == OTHER_STUFF) {
break ;
doinl2();
}
//程式碼break的意思是跳到這裡
init_module_pointer();
break;
case THING3:
...
}
}
上面的程式碼是想跳出if然後繼續執行init_module_pointer()但是並不是這樣,而是直接跳出了switch並未初始化
c 語言中的const只是型別約束,並非真正的常量
void func(void)
{
const int a;
switch() {
case a:
...
break;
...
default:
...
break;
}
}
這樣是會報錯的,因為a並非真正的常量,case後需要跟常量
3.c 語言函式中buf的傳遞
char *getTime(void)
{
char buf[120] = {0};
...
獲取time
...
strcpy(buf, timebuf, 120);
return buf;
}
在上面的這種用法中獲取time並列印後獲得的值是錯誤的,因為在棧中自動分配的buf在函式呼叫結束後就會被釋放,所以我們實際得到的緩衝區指標早已不知指到了哪
/*或許我們可以用malloc的方式獲得一塊buf, 但是這樣需要自己來管理記憶體,很容易出現忘記free的情況*/
char *getTime(void)
{
char *buf;
buf = malloc(120 * sizeof(char));
...
獲取time
...
strcpy(buf, timebuf, 120);
return buf;
}
所以我們可以引用一些標準函式的方法,讓使用者自己傳入buf
static char *getTime(char *buf, int len)
{
/*傳入長度以做一些判斷,看長度是否夠用*/
...
獲取time
...
strcpy(buf, timebuf, 120);
return buf;
}
int main(int argc, char **argv)
{
char buf[120] = {0};
getTime(buf, sizeof(buf));
return 0;
}
char *ptr = “Hello World!”; //字串指標是常量,不可重新賦值
4.陣列和指標並不相同
1>定義和宣告的區別
定義只能有一次,比如 int a;
宣告可以多次宣告,比如在其他檔案中引用變數 extern int x;