之前對字串初始化都是似懂非懂的,這裡做個總結。
int
main
(void);
char p2=
;char p3=
"hello"
;char p =
'3';
printf
("%c\n"
, p)
;printf
("%s\n"
, p2)
;printf
("%s\n"
, p3)
;printf
("hello\n");
system
("pause");
}
上面列出是比較常見的幾種宣告方式。
首先,p1這種方法都編譯通過,但是不能列印出來,就算列印了也是不正確的字元。必須後面加個』\0』。
最最常見是p3宣告方式。
還有就是字串只有乙個可見字元時只能單引號,而且輸出用%c,而不是%s
char p=
"hello"
;char
*p1 =
"hello"
;
這兩個都是指向同個字串。
但是 p是字元陣列 --------------p1是指標。
還有一點要注意,p1是常量指標,不能被修改。
也就是說不能執行以下操作:
char p=
"hello"
;p = p +
1;
編譯器會報錯,因為在釋放指標記憶體時,要保證完整。
發現一篇部落格寫的很好:字串
這位大哥總結的很完整。
#include
"stdio.h"
intmain
(void
)
字串遍歷有三種方式,其本質其實是一樣的。
#include
"stdio.h"
intmain
(void
)for
(i =
0; i <
strlen
(a); i++
)for
(i =
0; i <
strlen
(a); i++
)printf
("\n");
printf
("hello\n");
system
("pause");
return0;
}
第一種是我們最常見的遍歷,但是第二種才是編譯器的理解,所以按照第二種寫效率會更高。
從這個例子可以知道其實 *和是一樣的,只是表現形式不一樣。
#include
"stdio.h"
intmain
(void
) b[i]
='\0'
;printf
("%s\n"
, b)
;printf
("hello\n");
system
("pause");
return0;
}
這是不傳參的,要注意for裡面的判斷條件,當然也可以寫a[i] !=』\0』。
還有不要忘了在最後加個\0,不然會出錯。
#include
"stdio.h"
intstrcopy
(char
*a,char
*b)int i =0;
for(;*
(a + i)
!='\0';)
*(b + i)
='\0'
;return0;
}int
strcopy1
(char
*a,char
*b)int i =0;
while((
*to =
*from)
!='\0'
)return0;
}int
strcopy2
(char
*a,char
*b)int i =0;
while((
*to ++
=*from++)!=
'\0'
)return0;
}int
main
(void
)printf
("%s\n"
, b)
;printf
("hello\n");
system
("pause");
return0;
}
上面有三種不同拷貝方法,都需要學習,對提高**編寫能力有提高。
剛剛上面**最好每個形參過來,在每個被調函式裡面再申明變數把形參接過來,盡量不要去改變形參的值。
比如:
int
strcopy1
(char
*a,char
*b)printf
("%s"
,a);
return0;
}
這樣會出問題的,因為a的指向一直在變,到最後是不能得到相應結果的。 C語言指標總結
2012 03 07 07 22 標籤 c語言 分類 pointer c語言中的精華是指標,這也是c語言中唯一的難點。c是對底層操作非常方便的語言,而底層操作中用到最多的就是指標,以後從事嵌入式開發的朋友們,指標將陪伴我們終身。1.指標型別分析 分析指標,可以從變數名處起,根據運算子優先順序結合,一...
C語言指標總結
c語言中的精華是指標,這也是c語言中唯一的難點。c是對底層操作非常方便的語言,而底層操作中用到最多的就是指標,以後從事嵌入式開發的朋友們,指標將陪伴我們終身。1.指標型別分析 分析指標,可以從變數名處起,根據運算子優先順序結合,一步一步分析.int p 這是乙個普通的整型變數 int p 首先從 p...
C語言指標總結
指標分析 指標的型別 把指標宣告語句裡的指標名字去掉,剩下的部分就是這個指標的型別 指標所指向的型別 把指標宣告語句中的指標名字和名字左邊的指標宣告符 去掉,剩下的就是指標所指向的型別 在指標的算術運算中,指標所指向的型別有很大的作用 指標本身所佔據的記憶體區 用函式sizeof 指標的型別 可以測...