C ++ Struct指针问题

时间:2010-11-01 01:37:07

标签: c++ pointers struct

这可能很简单,但我试图更好地尝试和理解指针。 让我们说我有一个结构

struct Person{
  char Name[20];
  char ID[15];
  char Address[50];
  char Number[15];
};

并且假设我有一堆这样的存储在内存中,就像一个接一个。 所以现在我声明一个指向结构的新指针。

struct Person *ptr;

这个指针会从第一个条目开始吗? (又名第一个“名字”),当我迭代它(又名ptr ++)时,它会转到下一个STRUCT或下一个“条目”,如名称 - > ID --->地址

因此,我想在第一个条目上说例如,数据是:

Jason Adams
111222333
111 Fake Drive
55555551000

,第二个条目是

Matt Johns
111555333
555 Derp lane
1000022434

现在我迭代ptr(ptr ++)将ptr指向第二个结构(带有matt johns的那个)或者它会指向Jason Adams“ID”

我希望这有道理吗?

3 个答案:

答案 0 :(得分:5)

它将指向第二个结构。指针将按sizeof(Person)提前。

答案 1 :(得分:2)

正如约翰所提到的,它将以其自身的大小 - 即sizeof(人物)来推进。

指针操作很有趣,你可以做一些事情,比如将指针强制转换为其他类型。一旦这样做,指针算术将按类型的基础大小前进。通常,您会看到指向(byte *)或(unsigned char *)的指针,以允许单个字节访问底层数据。

答案 2 :(得分:0)

首先,在使用之前必须为指针ptr分配内存。

auto_ptr<Person> ptr(new Person); //auto_ptr for automatic freeing

之后,您可以尝试以下代码。

strcpy(ptr->ID, "100"); //For illustraction
int offset = ptr->ID - ptr->Name; //Get offset of ID member
char *pID = ((char *)ptr.get())+ offset;
//Typecast to char pointer and increment by offset to get to ID field
cout<<pID; //Now pId can be used to access ID.

您询问了如何通过递增ptr来访问ID属性。

如上所示,您可以访问结构的ID成员。