字符指針變量和字符數(shù)組在C語言的討論
(2)賦值方式。對(duì)字符數(shù)組只能對(duì)各個(gè)元素賦值,不能用以下辦法對(duì)字符數(shù)組賦值;char str[14]; str=“I love China.”;
對(duì)字符指針變量,可以采用下面方法賦值:
char *a; a= “I love China.”; /*賦給a的是串的首地址*/
(3)對(duì)字符指針變量賦初值:
char *a=“I love China.”; 等價(jià)于 char *a; a=“I love China.”;
而對(duì)數(shù)組的初始化:
char str[14]={“I love China.”}; 不等價(jià)于 char str[14];
str[]=“I love China.”;
即數(shù)組可以在變量定義時(shí)整體賦初值,但不能在賦值語句中整體賦值。
(4)如果定義了一個(gè)字符數(shù)組,在編譯時(shí)為它分配內(nèi)存單元,它有確定的地址。 而定義一個(gè)字符指針變量時(shí),給指針變量分配內(nèi)存單元,在其中可以放一個(gè)地址值,也就是說,該指針變量可以指向一個(gè)字符型數(shù)據(jù),但如果未對(duì)它賦一個(gè)地址值,則它并未具體指向一個(gè)確定的字符數(shù)據(jù)。這很危險(xiǎn)。
如: char str[10]; scanf(“%s”,str); 是可以的
char *a;
scanf(“%s”,a); 能運(yùn)行,但危險(xiǎn),不提倡,在a單元中是一個(gè)不可預(yù)料的值。應(yīng)當(dāng) char *a,str[10]; a=str; scanf(“%s”,a);
(5)指針變量的值是可以改變的,數(shù)組名雖然代表地址,但它的值是不能改變的??梢韵聵?biāo)形式引用所指的字符串中的字符。
如:main()
{char *a=“I love China.”;
a=a+7;
printf(“%s”,a); }
又如:char str[]={“I love China.”}; str=str+7; printf(“%s”,str); 是錯(cuò)的
(6)用指針變量指向一個(gè)格式字符串,可以用它代替printf函數(shù)中的格式字符串。也可以用字符數(shù)組實(shí)現(xiàn),但由于不能采用賦值語句對(duì)數(shù)組整體賦值。
如:char *format; format=“a=%d,b=%f\n”; printf(format,a,b);
等價(jià)于:printf(“a=%d,b=%f\n”,a,b);
也可以:char format[ ]=“a=%d,b=%f\n”; printf(format,a,b);
點(diǎn)擊加載更多評(píng)論>>