这可能很简单,但我试图更好地尝试和理解指针。 让我们说我有一个结构
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”
我希望这有道理吗?
答案 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成员。