星期四

c語言 字串和字串指標

※字串陣列:

(一) 宣告 同時 初始化:
        (1) char str [4] = { ‘a’, ‘b’, ‘c’, ‘\n’ } ;
        (2) char str [  ] = { ‘a’, ‘b’, ‘c’, ‘\n’ } ;
        (3) char str [4] = " abc " ;
        (4) char str [   ] = " abc " ;
(二) 先宣告 再 assign:
        (1) char str [4] ;
                   str [0] = ‘a’ ;
                   str [1] = ‘b’ ;
                   str [2] = ‘c’ ;
                   str [3] = ‘\n’ ;
        (2) 錯誤的寫法:
               char str [4] ;
                   str [4] = "abc" ;
        (3) char str [4] ;
                   scanf ( "%s", str ) ;
        (4) 會有問題:
               char str[4] ;
                   for ( i=0; i<4; i++ ){
                       scanf ( "%c", &str[i] ) ; 
                   }

(三) 已經宣告且 已經初始化 或 assign 還是可以改變其單獨的 element。
         但只能一個一個element改變。

(四) 但如果 str 是以陣列型式宣告 即 char str[4],則
         陣列名稱指標 str :
        (1) 無法再將其他位址再指定給 str!(以指標型式宣告可以)
        (2) 無法再第二次以 "efg" 方式重新 assign。

(五) 字串: 
        char str[4] = "~" ;
        printf ( "%s", str ) ; —————字串
        printf ( "%p", &str ) ; ————-位址 (第一個element 的位址)
        printf ( "%c", *str ) ; ————-第一個element 的值

※字串指標:

(一) 宣告 同時 初始化:(只有一種方式)
        char  *str = "abc" ;

(二) 先宣告 再 assign:
        (1) X 不行!無法一個一個 element 做 assign。
        (2) char  *str ;
               str = "abc" ;
        (3) X 不行!不能用在 scanf。
        (4) X 不行!不能用在 scanf。

(三) 已經宣告且 已經初始化 或 assign ,無法改變其單獨的 element。
         只能一次全部改變:str = "efg"。

(四) 但如果 str 是以指標型式宣告 即 char  *str,則
         指標名稱 str :
        (1) 可以將其他位址再指定給 str!(以陣列型式宣告不可以)
        (2) 可以第二次以 "efg" 方式重新 assign。

(五) 指標:
        char  *str = "~" ;
        printf ( "%s", str ) ; —————字串
        printf ( "%p", &str ) ; ————-位址 (第一個element 的位址)
        printf ( "%c", *str ) ; ————-第一個element 的值

沒有留言:

張貼留言