结构中的指针和字符

时间:2017-12-20 15:45:21

标签: c++

如何用指针读取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;
}

4 个答案:

答案 0 :(得分:6)

使用<ItemsControl ItemsSource="{Binding Permissions}"> <ItemsControl.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Name}" Width="100" VerticalAlignment="Center"/> <ComboBox SelectedValuePath="Content" SelectedValue="{Binding Permission}"> <ComboBoxItem Content="None"/> <ComboBoxItem Content="Read"/> <ComboBoxItem Content="Write"/> </ComboBox> </StackPanel> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> p增加p++会将您移至p = p+1的下一个实例,这不是您想要的(并且它甚至不在那里) )。

相反,您想要移到struct list的第二个字母,这可以通过多种方式完成:

  • 在名称上使用索引 - name
  • 指向cout << p->name[1] << endl;并将其递增,即p->name
  • 使用指针算术而不是索引,即char *np = p->name; np++; cout << *np

答案 1 :(得分:2)

您可以在public T create(T entity) { return getEntityManager().merge(entity); } 上使用 index 来访问任何字符:

name //给出了&#39; <#39;

p->name[1] //给出&#39; r&#39;

请注意,数组的索引值为0.因此p->name[2]会给p->name[0]

'c'实际上会增加p + 1,这是指向p的指针。这基本上移动到list的下一个实例,甚至在代码中都没有初始化。

答案 2 :(得分:2)

使用索引为onaftersave的数组subscript operator

1

答案 3 :(得分:1)

如果你想使用没有下标操作符的指针输出第二个字符,那么你可以写

cout << p->name[1] << endl;

相同
for ( const char *q = p->name; *q != '\0'; ++q )
{
    cout << *q;
}
cout << endl;

或者你可以引入一个中间指针。例如

{{1}}