struct NodeList * headNodePtrList;
headNodePtrList= new NodeList[10]; 上面的指针是否指向由10个NodeLists对象组成的数组?或
数组,包含10个指向10个NodeLists对象的指针。
headNodePtrList[list].headOfList=newNode;当我试着做上面的事情时,它是有效的,但是如果我这样做的话
headNodePtrList[list] -> headOfList=newNode; ‘->’的基操作数具有非指针类型‘NodeList’.我理解它的意思,但我总是认为前2行创建了一个由10个NodeList指针组成的数组。
发布于 2014-09-10 16:50:43
struct NodeList * headNodePtrList;
headNodePtrList = new NodeList[10];上面的指针是否指向由10个NodeLists对象组成的数组?或包含10个指向10个NodeLists对象的指针的数组
他们都不是。headNodePtrList是指向已保留10 * sizeof(NodeList)字节内存的位置的指针。
当您从这个数组访问单个元素时,编译器实际上获取指针headNodePtrList的基址,并添加x乘以sizeof(NodeList) no其地址。我的意思是:
headNodePtrList[4].int_member = 1234;与以下相同:
*(headNodePtrList + 4 * sizeof(NodeList)).int_member = 1234;Explaination:
一个简单的my_array[3] of struct my_struct数组
struct my_struct {
int a;
int b;
}将像这样排列在(例如)内存中:
| Memory Address | Reserved for |
---------------------------------------------------------------------
0x0000 my_array[0].a and where my_array is pointing at
0x0004 my_array[0].b
0x0008 my_array[1].a
0x000C my_array[1].b
0x0010 my_array[2].a
0x0014 my_array[2].b例如,当您访问my_array[1].b时,编译器将基本上创建一个从address my_array + 1 * sizeof(my_struct) + offsetof(my_struct, b)读取的地址,其中offsetof()宏在struct my_struct中传递结构成员b的偏移量。
误差
base operand of ‘->’ has non-pointer type ‘NodeList’意味着->剩下的不是指针。实际上,您使用括号headNodePtrList取消了指针[]的引用。
headNodePtrList[list] -> headOfList = newNode; 只应该是
headNodePtrList[index].headOfList = newNode; 顺便说一句:不要选择索引变量的名称list!把它们命名为index或indexList或..。
https://stackoverflow.com/questions/25770801
复制相似问题