1) 字符串指針變量是個變量,指向字符串的首地址;而字符串數(shù)組名是個常量,為字符串數(shù)組第一個元素的地址;
2)字符串指針變量可以賦值,而字符串數(shù)組名不能賦值; 對于字符數(shù)組只能對各個元素賦值,不能用以下辦法對字符數(shù)組賦值: char str[14]; str = 'I love you!'; 而對于字符指針變量,可采用如下賦值: char *a; a = 'I love you!'; 賦值給a的是字符串第一個元素的地址
3)定義一個字符串指針變量時,只給指針變量分配了空間,但指針變量存放的地址并沒有分配,即不知道該指針到底指向哪個字符串(當然這種做法是危險的);而定義一個字符串數(shù)組,在編譯時會占用實際的空間,比如int a[100]則會占用400個字節(jié)的空間;
4)對于二維數(shù)組與指針數(shù)組的區(qū)別:指針數(shù)組的每一行長度可以不同,而二維數(shù)組的每行的長度是相同的。
網(wǎng)上找到一篇寫的比較詳細的:
(1)分配內存 設有定義字符型指針變量與字符數(shù)組的語句如下: char *pc ,str[100]; 則系統(tǒng)將為字符數(shù)組str分配100個字節(jié)的內存單元,用于存放100個字符。而系統(tǒng)只為指針變量pc分配4個存儲單元,用于存放一個內存單元的地址。 ?。?)初始化賦值含義 字符數(shù)組與字符指針變量的初始化賦值形式相同,但其含義不同。例如: char str[ ] ='I am a student ! ' ,s[200]; char *pc='You are a student ! ' ; 對于字符數(shù)組,是將字符串放到為數(shù)組分配的存儲空間去,而對于字符型指針變量,是先將字符串存放到內存,然后將存放字符串的內存起始地址送到指針變量pc中。 ?。?)賦值方式 字符數(shù)組只能對其元素逐個賦值,而不能將字符串賦給字符數(shù)組名。對于字符指針變量,字符串地址可直接賦給字符指針變量。例如: str='I love China! '; //字符數(shù)組名str不能直接賦值,該語句是錯誤的。 pc='I love China! '; //指針變量pc可以直接賦字符串地址,語句正確 ?。?)輸入方式 可以將字符串直接輸入字符數(shù)組,而不能將字符串直接輸入指針變量。但可將指針變量所指字符串直接輸出。 例如: cin >> str //正確 cin >> pc //錯誤 cout< (5)值的改變 在程序執(zhí)行期間,字符數(shù)組名表示的起始地址是不能改變的,而指針變量的值是可以改變的。例如:str=str+5; //錯誤 pc=str+5; //正確 小結 字符數(shù)組s[100] 指針變量pc ?。?)分配內存 分配100個單元 分配4個單元。 ?。?)賦值含義 字符串放到數(shù)組存儲空間 先將字符串存放到內存 將存放串的首地址送到pc中。 ?。?)賦值方式 只能逐個元素賦值 串地址可賦給pc ?。?)輸入方式: 串直接輸入字符數(shù)組 不能將字符串直接輸入指針變量 ?。?)值的改變: 字符數(shù)組首地址不能改變 指針變量的值可以改變 由以上區(qū)別可以看出,在某些情況下,用指針變量處理字符串,要比用數(shù)組處理字符串方便。 yathing分析這個問題: 一個是變量、一個是數(shù)組,其實也是一個變量符號(這個str本身不能改變而已),從這個共同點出發(fā)考慮問題,變量的事情,無非就是“存儲”、“操作(operate)”兩個方面,下面的任務就是詳細地思考了: 1,空間上的差異:兩種類型是如何存儲的。 2,操作上的差異:如何取用(輸入輸出,賦給別的元素)、如何對賦值、如何改變它們 盡可能地詳盡上面兩方面的內容,回憶平時編程的例子,最后就能寫出答案。
|