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 可以用來接受字串,但它需要提供字串的指標。子函式在... 唯一的區別就是字串末尾有一個 0 面字元陣列是沒有的.char ch1 hello 該串有6個字元,5個可見字元,因為是串,所以末尾自動加上 0 共六個 char ch2 這樣寫就成了陣列.是確確實實的5個字元 c語言字串陣列和字元陣列有什麼區別?這個是字元陣列。c語言字元陣列和字串的區別,字元陣列... 陣列的長來度是固定的,源我們知道在哪個地方結束。對於c型別的字串,要想知道在那個地方結束的話,我們只需要檢測某個位置的字串是不是 0就行了,也就是說c型別的字串是以 0標記結束的。所以字元陣列和c型別字串的區別就是那個 0。其實從字元陣列和c型別字串的儲存位置上來說也是不同的,這也算是一個區別吧。結...字元陣列和字串的區別,請問字串和字元陣列的區別是什麼
c中字元陣列和字串類的區別
c語言中關於字元陣列和字串的區別