2008年11月22日 星期六

C 語言學習 Part II

我好像都跳著記錄 ... 通常有疑惑的部分我才會自己寫個測試看看,所以感覺是測試筆記 ...

說不定沒測試的部分雖然看懂了但卻沒有記下來 ... !不過不管怎樣就繼續往下吧!



這一樣是從良葛格學習筆記繼續的。

這是直接從某位址放進字串的方法
#include <stdio.h>

int main(void) {
    
// 在 *str1 這個位址放入 h,然後依序放入 ello
    char *str1 = "hello";
    
    
// 偏移量為 0 即為 h 
    printf("%c\n", str1[0]);
    
    
// 偏移量加 1 即為 e 
    printf("%c\n", *(str1 + 1));
    
    
// 偏移量加 5 也是放了一個 '\0',與陣列字串一樣? 
    if (str1[5] == '\0') {
        
puts("如果偏移量加 5 的位址放了 '\\0' 就會看到這行");
    
}
}



釐清底下兩個例子
#include <stdio.h>

int main(void) {
    
// 這個例子要證明底下兩個是不同的
    
    
// 例子一
    char *str1[] = {"abc12", "def", "ghi", "jkl", "mno", "pqr", "stu", "vwx", "xy1", "234"};
    
    
// 例子二
    char str2[10][4] = {"abc", "def", "ghi", "jkl", "mno", "pqr", "stu", "vwx", "xy1", "234"};
    
    
printf("str1\t\t指向這個位址\t\t%X\n", str1);
    
    
printf("str1[0]\t\t的位址是\t\t%X\n", &str1[0]);
    
printf("str1[0]\t\t這個位址所存放的是\t%s\n", str1[0]);
    
    
printf("str1[1]\t\t的位址是\t\t%X\n", &str1[1]);
    
printf("str1[1]\t\t這個位址所存放的是\t%s\n", str1[1]);
    
    
// 這邊可以看的出來,它的空間會配合宣告而變動 
    printf("str1[0][6]\t這個位址所存放的是\t%c\n", str1[0][6]);
    
    
puts("");
    
    
printf("str2\t\t指向這個位址\t\t%X\n", str2);
    
    
printf("str2[0]\t\t的位址是\t\t%X\n", &str2[0]);
    
printf("str2[0]\t\t這個位址所存放的是\t%s\n", str2[0]);
    
    
printf("str2[1]\t\t的位址是\t\t%X\n", &str2[1]);
    
printf("str2[1]\t\t這個位址所存放的是\t%s\n", str2[1]);
    
    
printf("str2[0][4]\t這個位址所存放的是\t%c\n", str2[0][4]);
}

沒有留言: