C++指針和數組的區別(不能混用的情況)


通常情況下,C++中指針和數組是可以混用的,但是,在編寫字符數組的全排列的時候,混用卻出了問題,因此,今天特地mark一下,以備日后查找

 這里整理的,不包括用new開辟的動態數組

1.數組一旦聲明,我們就不能再給它賦值,但是我們可以給指針賦值

如下:

5、6行都錯,因為數組s不能作為左值被賦值

報錯階段:程序會在編譯時報錯

1 int main(){
2     char s[]="123";
3     char p[]="123";
4     char *t=NULL;
5     s=t;
6     s=p;
7 } 

 

2.用指針定義字符串時,指針所指的字符串會被理解為常量字符串,不能修改。數組定義的字符串則可以修改。

如下:例子中用swap對指針進行修改,比較 s 和 s1 的不同

結果:s1的結果能夠正確輸出,但是程序會在swap交換s的元素時,在i=j這一句掛掉。

原因即為上面所說,指針聲明的字符串是常量的。

報錯階段:程序運行時直接掛掉

 1 void swap(char &i,char &j){
 2     char t=i;i=j;j=t;
 3 }
 4 int main(){
 5     char *s="1234";
 6     char s1[]="1234";
 7     swap(s1[0],s1[2]);
 8     printf("%s\n",s1);
 9     swap(s[0],s[2]);
10     printf("%s\n",s);
11 } 

在vs上調試可以看到報錯為:

 

 

 3.用sizeof運算符可以計算數組變量的數組大小,但指針指向數組時,只能計算出指針本身大小(單位:字節)

1 int main(){
2     char *s="1234567890";
3     char s1[]="1234567890";
4     printf("s:%d  s1:%d  char:%d",sizeof(s),sizeof(s1),sizeof(char));
5 } 

 

運行結果:s:8  s1:11  char:1

注意,字符串的結束符'\0'也被sizeof計算在內,因此字符串類型比內容長1,如果是其他基本類型,則sizeof(數組名)/sizeof(類型名)即為數組長度。

 其他的問題,可以參考這個:

《C專家編程》的筆記-指針與數組的區別

更多的區別,待我有空拜讀了《C專家編程》之后,再來解決嘍

ok~暫時就發現了這么多,拜拜(●'◡'●)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM