指針系統學習5-對使用字符指針變量和字符數組的討論
雖然用字符數組和字符指針變量都能實現字符串的存儲和運算,但它們二者之間是有區別的,不應混為一談……
主要概括起來有以下幾點:
1. 字符數組由若幹個元素組成,每個元素中 放一個字符,而字符指針變量中存放的是地址(字符串第1個字符的地址),決不是將字符串放到字符指針變量中。
2. 賦值方式。對字符數組只能對各個元素賦值,不能用以下辦法對字符數組賦值。
char str[20];
str=″I love Fishc.com!″;
而對字符指針變量,可以采用下面方法賦值:
char *a;
a=″I love Fishc.com!″;
但註意賦給a的不是字符,而是字符串第一個 元素的地址。
3. 對字符指針變量賦初值:
char *a=″I love Fishc.com!″;
等價於
char *a;
a=″I love Fishc.com!″;
而對數組的初始化:
char str[20]={″I love Fishc.com!″};
不能等價於
char str[20];
str[ ]=″I love Fishc.com!″;
4. 如果定義了一個字符數組,在編譯時為它分配內存單元,它有確定的地址。而定義一個字符指針變量時,給指針變量分配內存單元,在其中可以放一個字符變量的地址也就是說,該指針變量可以指向一個字符型數據,但如果未對它賦予一個地址值,則它並未具體指向一個確定的字符數據。
我們舉個例子來說明,如:
char str[10];
scanf(″%s″,str);
以上是完全可以的!
而常有人用下面的方法,目的是想輸入一個字符串,雖然一般也能運行,但這種方法是危險的 :
char *a;
scanf(″%s″,a);
5. 指針變量的值是可以改變的,如:改變指針變量的值
#include <stdio.h> void main() { char *a = "I love Fishc.com!"; printf("%s\n", a);//I love Fishc.com! aView Code+= 7; printf("%s\n", a);//Fishc.com! }
另外需要說明的是,若定義了一個指針變量,並使它指向一個字符串,就可以用下標形式引用指針變量所指的字符串中的字符。
下標形式引用指針變量如下:
#include <stdio.h> void main() { char *a = "I love Fishc.com!"; int i; printf("The sixth character is %c\n\n", a[5]);//The sixth character is e for( i=0; a[i] != ‘\0‘; i++ ) { printf("%c", a[i]); } //I love Fishc.com! printf("\n"); }View Code
指針系統學習5-對使用字符指針變量和字符數組的討論