程式1:
首先是static變數,要注意static變數宣告在函式裡面跟外面是不同的。
#include <stdio.h>
int fun1(){
static int i = 0;
i++;
return i;
}
static int j;
int fun2(){
j = 0;
j++;
return j;
}
int main(){
int k = 0;
int x = 0, y = 0;
for(k=0; k<10; k++){
x = fun1();
y = fun2();
}
printf("i = %d, j = %d", x, y);
return 0;
}
上面程式輸出如下
i = 10, j = 1
程式2
#include <stdio.h>
int b[100];
int fun(int* b){
return sizeof(b);
}
int main(){
int *p = NULL;
printf("sizeof(p) = %ld, sizeof(*p) = %ld\n", sizeof(p), sizeof(*p));
int a[100];
printf("sizeof(a) = %ld, sizeof(a[100]) = %ld\n", sizeof(a), sizeof(a[100]));
printf("sizeof(&a) = %ld, sizeof(&a[0]) = %ld\n", sizeof(&a), sizeof(&a[0]));
printf("sizeof(b) = %d\n", fun(b));
}
這是為了分一下指標跟陣列的不同而寫的程式,待解決問題:
& a是什麼東西?
輸出如下:
sizeof(p) = 8, sizeof(*p) = 4
sizeof(a) = 400, sizeof(a[100]) = 4
sizeof(&a) = 8, sizeof(&a[0]) = 8
sizeof(b) = 8
程式3
#include <stdio.h>
int main(){
union{
int i;
char a[2];
}*p, u;
p = &u;
p->a[0] = 0x39;
p->a[1] = 0x38;
printf("p.i = %x\n", p->i);
}
這是用來區分Big-Endian 與Little-Endian 的程式碼
輸出如下:
p.i = 3839
程式4
#include <stdio.h>
int main(){
int a[5] = {1,2,3,4,5};
int *ptr1 = (int*)(&a+1);
int *ptr2 = (int*)(a+1);
int *ptr3 = (int*)(&a[0]+1);
printf("%d\n", ptr1[1]);
printf("%d\n", *ptr2);
printf("%d\n", ptr3[-1]);
}
這是用來分清楚指標的小程式
輸出如下:
1355250944
2
1
另外,還下載了一個小程式xsel,可以把檔案內容複製到剪貼簿。
首先安裝:
sudo apt-get install xsel
把檔案內容複製到剪貼簿:
cat 檔名 | xsel -b -i