[英]Pointer and char in struct
如何用指針讀取char中的第二個字母? 我可以閱讀整個消息“鯉魚”和第一個字母'c',但我不知道如何閱讀第二個字母......這是我的示例代碼:
#include <iostream>
#include <string>
using namespace std;
int main()
{
struct list {
char name[20];
int length;
};
list first ={
"carp",
6,
};
list *p = &first;
cout << p->name << endl; // "carp"
cout << *p->name << endl; // "c"
p = p + 1;
cout << *p->name << endl; // Not working...How to read a?
return 0;
}
使用p++
或p = p+1
遞增p
將使您進入struct list
的下一個實例,這不是您想要的(並且它甚至不存在)。
相反,您希望移動到name
的第二個字母,可以通過以下幾種方式完成:
cout << p->name[1] << endl;
p->name
的指針並遞增它,即char *np = p->name; np++; cout << *np
char *np = p->name; np++; cout << *np
cout << *(p->name+1) << endl;
您可以使用name
上的索引來訪問任何字符:
p->name[1]
//給'a'
p->name[2]
//給出'r'
請注意,數組的索引值為0.所以p->name[0]
會給出'c'
。
p + 1
實際上遞增p
,這是指向list
的指針。 這基本上移動到list
的下一個實例,甚至在代碼中都沒有初始化。
使用索引為1
的數組下標運算符 :
p->name[1];
如果你想使用沒有下標操作符的指針輸出第二個字符,那么你可以寫
cout << *( p->name + 1 ) << endl;
它是一樣的
cout << p->name[1] << endl;
或者你可以引入一個中間指針。 例如
for ( const char *q = p->name; *q != '\0'; ++q )
{
cout << *q;
}
cout << endl;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.