簡體   English   中英

char *和char []

[英]char * and char[]

為什么這是對的?

#include<iostream>
using namespace std;
int main()
{
    char *s="raman";
    char *t="rawan";
    s=t;
    cout<<s;

return 0;
}

但這是錯的?

#include<iostream>
using namespace std;
int main()
{
    char s[]="raman";
    char t[]="rawan";
    s=t;
    cout<<s;

return 0;
}

在第一個例子中, s=t進行指針賦值。 在第二個中, s=t嘗試將指針值(由數組表達式t的隱式轉換或“衰減”產生)分配給數組對象。 C ++不允許數組賦值。

C和C ++在這個領域恰好相似; comp.lang.c FAQ的第6節很好地介紹了數組和指針之間的關系。

第一個示例將指針指向另一個有效的指針。

第二個例子將一個數組分配給另一個數組,這個數組在C&C ++中都不允許。


這個優秀的C ++ FAQ條目和這個答案應該是一個很好的閱讀。

除了其他人說的話:

與流行的看法相反,數組實際上不是指針。 他們在使用它們時只是分享了許多相似之處,並且對指針進行了幾次隱式轉換,這就是為什么它們很容易使用它們就好像它們是指針一樣。

數組是(C和C ++)的獨立功能。 它的行為與指針不完全相同。

例如,可以在堆棧上分配數組對象,這在使用new(返回指針)和指針分配對象時是不可能的。

您展示的示例是另一個示例:您不能將數組用作指針。 但是你可以使用指針指向連續的內存(數組)。

char *s表示:
地址和價值都不是一成不變的。

const char *s:

值是常數,而不是地址。

const char * const s;

地址和價值都是不變的。

char *s[] 

是一個數組。 數組基址始終存在。 您無法更改它的基址,這在c中是不允許的。

數組名稱是一個const指針。 意思是,當你聲明一個數組時,名稱是一個指針,不能改變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM