正文 第32章 指針5(2 / 2)

方法1:

voidmain()

char*a="helloworld!",b[20];

inti;

for(i=0;*(a+i)!=\0;i++)

*(b+i)=*(a+i);

*(b+i)=\0;

printf("stringais:%s\n",a);

printf("stringais:%s\n",b);

方法2:

voidmain()

chara[]="helloworld!",b[20];

inti;

for(i=0;*(a+i)!=\0;i++)

*(b+i)=*(a+i);

*(b+i)=\0;

printf("stringais:%s\n",a);

printf("stringais:%s\n",b);

兩種方法比較:

(1)字符數組是將字符串中的每一個字符存放在數組的元素中,而字符指針變量中存放的是字符串的首地址,而不是將字符串放到字符指針變量中。

(2)初始化形式一樣,但意義不一樣。

char*a="helloworld!";

等價於

char*a;

a="helloworld!";

而對字符數組的初始化:

chara[20]="helloworld!";

不能等價於

chara[20];

a[20]="helloworld!";

(3)賦值方式不一樣,字符數組不能整體賦值,但字符指針變量是一個變量,所以可以整體賦值。例如:

chara[20];

a="helloworld!";

是錯誤的,但

char*a;

a="helloworld!";

是正確的。

(4)如果定義一個字符數組,在編譯時為它分配內存單元,用來存放字符串中的字符和字符串結束標誌;而定義一個字符指針變量,在編譯時隻給字符指針變量分配內存單元,而不為字符串分配空間。例如:

charstr[20];

scanf("%s",str);

是可以的,而用下麵的方法:

char*p;

scanf("%s",p);

目的是為了輸入一個字符串,編譯時程序能夠通過,但運行時會出問題。如果把字符指針變量和字符數組聯合起來使用又可以,如:

charstr[20],*p;

p=str;

scanf("%s",p);

因此,不管使用哪種方式來處理字符串,一定要謹慎小心。