字符串指針與一維數組指針有很多共同點,但也有一些區別:
1、賦值有要求。
我們可以在程序中將一個字符串賦給一個字符串指針變量,但不可以將一個字符串賦給一個數組名。即:
允許:char *p; p = "I am a teacher !"; 但不可心: char a[20]; a = "I am a teacher!";這是因爲字符串指針變量本身是一個變量,而字符串代表了其首地址,因而賦值是理所當然的;但數組就不一樣,數組一旦定義後,數組在內存中的存儲單元即確定,數組名所代表的數組首地址即確定,它便不可改變,因而不可將一個字符串賦給數組名。
2、指針變量必須有明確的指向目標。
當指針變量定義後,程序中必須先確定其指向的目標,然後纔可對其目標變量賦值,融導致系統死機。如:char *p;
scanf("%s",p);這樣的程序很危險。因指針變量p被定義後,未確定其指向的目標,很有可能p的初值爲0,即指向內存地址爲0的一系列單元,便改變了系統程序,導致系統崩潰、死機。
3、存取字符串中的字符特別。
儘管字符數組和字符串指針變量有所不同,但可以相同的形式來存取字符串的字符,即以相同的方式來表示數組元素。如:char *p = "I am a teacher!";我們仍可用p[0],p[1]……依次表示字符I,a……等。
4、可靈活使用字符串指針變量。
由於字符串指針變量存儲字符串常量,因而在字符串常量出現的地方可用一字符串指針變量來取代。如:
#include <stdio.h>
int main()
{
char *format = "a = %d,b = %d/n";
int a = 10,b = 20;
printf(format, a, b);
}