C 空字元指標和空字串的區別,字串也是地址啊,那麼他們兩個相等嗎

2022-05-07 08:51:15 字數 4102 閱讀 9390

1樓:

對於char* 這樣的指標,在型別上實際上不能區分開。你不知道它表示的是指向一個字元的指標,還是指向一個字串的指標。

只能從意義上來區分。

但實際上,字串是一個籠統的概念。一字串,可能是一串字元,也可能是一個結構表示的字串。這樣就區分開來了。

2樓:

字串就是字串,指標就是指標,不要把二者混淆。char *p,(*q)[10],a[10];這樣宣告的指標p是指向字元的,p=a是把字串的第一個字元的地址賦給p,並非把字串的首地址賦給p;q才是指向字串a的首地址的指標,q=a才是把字串a的首地址賦給q。由於a既是字串的首地址,又是字串第一個字元的地址,所以p和q的值是一樣的,但意義不一樣:

p+1指向下一個字元,而q+1指向下一個字串,就是說跳到&a[10]那個地址上了。「空字元指標」是啥意思?c++中沒有空字元,如''是非法的,所以根本不可能有空字元指標;而空字串是合法的,「」的意思是隻在這個字串常量中放一個'\0';所以空字串有指標,比如char *p=""是合法的。

3樓:匿名使用者

空字元指標是指指標的值為0吧

空字串是指這個字串的第一個位元組值為0吧,如果你說拿一個指標指向這個字串,那這個指標的值不為0而等於這個位元組的地址。

當然在c++裡通常用stl的std::string來存放字串。

用c++寫的「編寫程式比較兩個字串是否相等(用指標完成)。」哪位仁兄幫忙看一下為什麼錯了啊?

4樓:匿名使用者

你的迴圈語句沒有實現迴圈,對長度相同字串僅在比較第一個字元後,就終止迴圈、結束程式了。應當做下述改動:

將 改為 else return 0;

5樓:夢飛湖畔

int compare(char*p,char*q)}}

你加上個大括號就行了,for迴圈後如果不加括號的話,就只迴圈它後面的一句

6樓:一水臨風

if(strlen(p)==strlen(q))

//另外得加一行**,因為兩個字串長度不相等的話也得返回一個0.

else return 0;

7樓:匿名使用者

compare函式中for迴圈沒有將else語句包含

8樓:

想比較內容的話用strcmp()函式

求一個c++程式!怎樣採用字元指標,比較兩個字串?

9樓:冒險島樂樂

#include

#include

#include

#include

int main(void )

10樓:匿名使用者

#include

using namespace std;

void main()

else cout<<"unequal"<

11樓:

用strcmp不就直接解決了?

還可以用string物件直接==比較。

12樓:匿名使用者

#include

using namespace std;

const int buff_size = 100;

int main()

13樓:匿名使用者

char *p="abc";

char *q="mnkd";

int a=length(p);

int b=length(q);

if(a==b)

cout<

cout<

c++兩個分別指的陣列的指標能直接相等嗎,然後兩個陣列裡的值也都相等?

14樓:匿名使用者

分別指向不同的陣列,陣列的地址不同,那麼指標當然不同了,你說呢?

你說的可能是等號的過載問題吧

好像可以用,cstring型別的,好像可以用等號來比較兩個陣列的大小因為cstring中=運算子是過載了

15樓:戀雪

不能直接相等,可以一個一個的賦值,

如:int b[5]=;

int a[5];

for(int i=0;i<5;i++)

16樓:匿名使用者

所謂陣列就是記憶體裡的一塊地方。

所謂你用一個指標指向它,就是在指標裡存那塊地方的地址。

現在你開了兩個區域,並用兩個指標分別指向它們。然後把一個指標的值賦予另一個指標,那麼這兩個指標指向同一塊區域,另一塊區域就找不著了,雖然還在那裡。

所以你的問題就很有問題。不應該說「指標直接相等」,而應該說給另一個指標賦值。「相等」是判斷,而「賦值」是動作。

你想把一個陣列的值複製到另一個陣列,可以使用memcpy()函式。

17樓:種燒餅的怪叔叔

例如char a[5],b[5];//建立兩個陣列char *p1=a,*p2=b;

/*這個表示式的意思並不是把陣列存入指標p,而是說把陣列首個元素(例如a[0])的 [地址] 存入p空間中,p就好比一個箱子用來存地址。*/

p1=p2;

/*指標之間寫賦值號實際的意思是,把p2空間的內容放入p1中,前面說了,p1存的是a[0]的地址,p2是b[0]的地址,一交換,兩個空間都存放b[0]的地址了,例如執行printf ("%s",p);那麼會輸出b中存放的字串*,記住,交換的只是一個地址。/

c++字元指標與字串的問題

18樓:

"int b=5,*a=&b;cout<

"abcd"是一個字串常量,儲存在c++五大記憶體分割槽的常量區,是通過字元型指標來訪問的,a="abcd"意思是a指向字串"abcd",這裡「賦值」你從記憶體角度理解就是「指向」;

19樓:匿名使用者

abcd的地址賦給a了,那樣的賦值就是給的地址,而輸出的時候是要看輸出的要求,如果是輸出字元,就輸出字元了,

20樓:匿名使用者

為了避免lz混亂,我幫你重寫一次:

char *z;

z="abcd";

這段**,實際上是將字串abcd中a的地址賦給了指標z。

因為在執行z="abcd"的時候,程式首先在記憶體分配一個可供字串abcd存放的記憶體空間,再將指標z設定為指向這段記憶體空間的第一個地址,也就是存放字元a的地址。

至於樓主的第二個問題……

注意一下,第一個cout<

*a是解除指標引用的意思,也就是代表存放在指標a內的記憶體地址中所存放的資料。

因此,*a=&b實際意思是把變數b的實際記憶體地址賦給了a所儲存的記憶體地址。cout的結果自然也就是b的記憶體地址了。

21樓:樂創客

第五十六集 指標指向字串

c++語言中能用一個字串給一個指標變數賦值嗎?

22樓:匿名使用者

char *str; str="abc";這樣抄的賦值襲實際上是把常量區的字串"abc"的首地址賦值給了變數str

如果cout<話,由於cout接到了一個char *的變數,所以會自動按照輸出字串的方法輸出;你如果想輸出str中存放的地址要寫:cout<<(uinsigned int)str<

23樓:匿名使用者

可以給字元指標賦值,例如

char* str="這是一個字串";

這樣寫是可以通過編譯的。

24樓:開燕利夢蘭

可以,指標指向的就是字串的首地址。

如:char*

pcsztemp

="thisisa

const

string.";

字元陣列和字串的區別,請問字串和字元陣列的區別是什麼

字元陣列沒有結束標誌 0 而字串則在末尾有結束標誌 0 在c中,字串就是末尾有字串結束標誌 0 的字元陣列。如果用gets 輸入,則會自動在末尾加上結束標誌 0 c語言中應該是沒有字串這種資料型別的,它只有字元型別,字串也就是字元陣列。不過gets 可以用來接受字串,但它需要提供字串的指標。子函式在...

c中字元陣列和字串類的區別

唯一的區別就是字串末尾有一個 0 面字元陣列是沒有的.char ch1 hello 該串有6個字元,5個可見字元,因為是串,所以末尾自動加上 0 共六個 char ch2 這樣寫就成了陣列.是確確實實的5個字元 c語言字串陣列和字元陣列有什麼區別?這個是字元陣列。c語言字元陣列和字串的區別,字元陣列...

c語言中關於字元陣列和字串的區別

陣列的長來度是固定的,源我們知道在哪個地方結束。對於c型別的字串,要想知道在那個地方結束的話,我們只需要檢測某個位置的字串是不是 0就行了,也就是說c型別的字串是以 0標記結束的。所以字元陣列和c型別字串的區別就是那個 0。其實從字元陣列和c型別字串的儲存位置上來說也是不同的,這也算是一個區別吧。結...