1. 程式人生 > >指針系統學習5-對使用字符指針變量和字符數組的討論

指針系統學習5-對使用字符指針變量和字符數組的討論

技術分享 目的 討論 img div %s 內存 變量 註意

雖然用字符數組和字符指針變量都能實現字符串的存儲和運算,但它們二者之間是有區別的,不應混為一談……

主要概括起來有以下幾點:

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!

      a 
+= 7; printf("%s\n", a);//Fishc.com! }
View Code

 另外需要說明的是,若定義了一個指針變量,並使它指向一個字符串,就可以用下標形式引用指針變量所指的字符串中的字符。
下標形式引用指針變量如下:

技術分享圖片
#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-對使用字符指針變量和字符數組的討論