標籤:io strong 檔案 ar 問題 div amp size
該書中一些思想還是比較有用的,但隨著編譯器以及規範的變化,書中有些內容已經發生了變化,以下是實踐之後的一些總結。
1 - typedef int x[10] 和 define x int[10] 區別
define 定義為變數替換,而typedef為聲明替換;
#define peach int;
unsigned peach i; //wrong
typedef int banana;
unsigned banana i; //wrong
聲明替換用typedef
識別數組和函數指標
e.g:int const * zero; //zero是一個指標,指向一個常量整形char (*zero)[20]; //zero是一個指標,指向一個有20個char元素的數組typedef void (*ptr_to_func)(int); //ptr_to_func是新類型名,這種類型是一個函數指標,指向接收一個int參數,並返回void的函數char* const * (*zero)(); //zero是一個函數指標,該函數無參數,並返回一個指標,返回的指標指向一個常量指標char* (*zero[10])(int **p); //zero是一個數組,元素是函數指標,其指向的函數授受一個二維指標,並返回一個指向char的指標void (*signal
(int sig, void (*func)(int)))(int); //signal是一個函數,該函數接收一個int,一個函數指標,並返回一個函數指標 2- signal , longjmp , setjmp
#include <signal.h>
#include <stdio.h>
#include <setjmp.h>
jmp_buf buf;
void handler(int s) {
if(s==SIGSEGV) printf("now got a segmentation violation signal\n");
longjmp(buf,1);
}
int main() {
int *p = NULL;
signal(SIGSEGV,handler);
if(setjmp(buf)){
printf("back in main\n");
return 0;
} else {
printf("nothing\n");
}
*p = 0;
loop:
goto loop;
return 0;
}
3 . 數組和指標
數組a[10],則a和a [0]的地址等價;
#include <stdio.h>
int b[]={1,2};
int main() {
int a[10];
int *p = a;
printf("p %x \n",&p);
printf("&a %x\n",&a);
printf("&a[0] %x\n",&a[0]);
printf("&b %x\n",&b);
printf("&b[0] %x\n",&b[0]);
printf("%d\n",*b);
printf("%d\n",sizeof(a));
return 0;
}
結果:
p bfc4ca7c
&a bfc4ca54
&a[0] bfc4ca54
&b 804a014
&b[0] 804a014
1
40
4. 如果確定一個變數是有符號數還是無符號數?
#define ISUNSIGNED(a) (a>=0 && ~a > 0)
5.從檔案中隨機提取一個字串
依次讀取檔案,然後與儲存的字串進行選擇,則假設取到第N個,則以儲存N-1個,則當前機率和為1/N,而儲存的每個機率也為1/N。
6. 有趣的問題:如何用氣壓計量器測量建築物的高度?
要學會聚焦,問題是測量建築物高度,然後用到氣壓計量器就可以了。。。 方法很多了