char s[] = "Hello World";
上述的s是個char array,含12個byte(包含結尾\0),"Hello World"對s來說是initializer,將字元一個一個地copy進s陣列。
char *s = "Hello World";上述的s是一個pointer指向char,由於"Hello World"本身就是一個string literal,所以s指向"Hello World"這個string literal的起始記憶體位置。
char s[]為陣列,雖然s = &s[0],但s是『常數』,恆等於&s[0]無法改變,但char *s為pointer,指向s[0],但卻是變數,可以任意改變,故可用*s++任意更改pointer值。
#include <stdio.h>
#include <string.h>
char *s = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
int main(){
int i,c;
while((c = getchar())!=EOF){
for(i=1;s[i] && s[i]!=c;i++); /*輸入字串逐字檢查*/
if(s[i])putchar(s[i-1]); /*輸出前一個字元*/
else putchar(c); /*如果非其中字元,輸出原本字元(空白)*/
}
return 0;
}
沒有留言:
發佈留言