簡體   English   中英

結構中的指針和字符

[英]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.

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