C 語言練習程式(1) & linux把檔案內容複製到剪貼簿


程式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
#c language #linux






你可能感興趣的文章

Day02:從判斷式看 bytecode

Day02:從判斷式看 bytecode

MTR04_0617

MTR04_0617

[DAY9] 初學 Git (下)

[DAY9] 初學 Git (下)






留言討論