2015-05-27 82 views
1
char a[20]="this is"; 
cout<<strchr (a,'t')-a; 

怎麼可以這樣(一,「T」) - ?一個」可顯示字母T第一次出現的索引是如何工作的 有人說,編譯器使得ASCII字符的總和,然後 減去所確定的字符。,和strchr從字符串值的指數

+0

你可以保證有人說這是完全荒謬的,有幾個原因。 – usr2564301

+0

...順便說一句,作爲一個實驗,這不是一個很好的例子。例如,'cout <<'t' - 't';'也會'顯示't'的第一次出現的索引。「因此,重複你的行,並用樣本字符串中出現的所有字母(和非字母)替換「t」。爲了好玩,請在示例字符串中包含* not *。 – usr2564301

回答

0

x = strchr (a, 't')返回一個指針,指向C字符串a中第一個出現的字符t。在你的情況下,這恰好與a中的第一個字符的地址相同。這也是變量a指向的內容。

通過減去x - a你減去兩個地址,這(感謝pointer arithmetic magic)將給't'a索引。這是零,因爲xa是相等的。真的與ASCII無關。

0

這純粹是指針運算。

strchr (a,'t')指針在串a返回到字符't'a保持字符串的地址。

strchr (a,'t') - 一個回報你的t字符串中的索引a

例子:一個具有addrress 100內的h 地址將是101,

所以你會得到字符^ h

指數1
0

strchr返回一個指向字符串中第一個找到的字符的指針。

char str[] = "Some string with spaces"; 
char* ptr; 
ptr = strchr(str, ' '); 
while(ptr != 0) 
{ 
    printf("Space on %d. place\n", ptr - str); 
    ptr = strchr(ptr + 1, ' '); 
}