首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向10 NodeLists阵列的指针?或包含指向10个NodeLists对象的指针的数组

指向10 NodeLists阵列的指针?或包含指向10个NodeLists对象的指针的数组
EN

Stack Overflow用户
提问于 2014-09-10 16:41:40
回答 1查看 29关注 0票数 0
代码语言:javascript
复制
struct NodeList * headNodePtrList;

headNodePtrList= new NodeList[10]; 

上面的指针是否指向由10个NodeLists对象组成的数组?或

数组,包含10个指向10个NodeLists对象的指针。

代码语言:javascript
复制
headNodePtrList[list].headOfList=newNode;

当我试着做上面的事情时,它是有效的,但是如果我这样做的话

代码语言:javascript
复制
headNodePtrList[list] -> headOfList=newNode; 

‘->’的基操作数具有非指针类型‘NodeList’.我理解它的意思,但我总是认为前2行创建了一个由10个NodeList指针组成的数组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-10 16:50:43

代码语言:javascript
复制
struct NodeList * headNodePtrList;
headNodePtrList = new NodeList[10];

上面的指针是否指向由10个NodeLists对象组成的数组?或包含10个指向10个NodeLists对象的指针的数组

他们都不是。headNodePtrList是指向已保留10 * sizeof(NodeList)字节内存的位置的指针。

当您从这个数组访问单个元素时,编译器实际上获取指针headNodePtrList的基址,并添加x乘以sizeof(NodeList) no其地址。我的意思是:

代码语言:javascript
复制
headNodePtrList[4].int_member = 1234;

与以下相同:

代码语言:javascript
复制
*(headNodePtrList + 4 * sizeof(NodeList)).int_member = 1234;

Explaination:

一个简单的my_array[3] of struct my_struct数组

代码语言:javascript
复制
struct my_struct {
    int a;
    int b;
}

将像这样排列在(例如)内存中:

代码语言:javascript
复制
| 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的偏移量。

误差

代码语言:javascript
复制
base operand of ‘->’ has non-pointer type ‘NodeList’

意味着->剩下的不是指针。实际上,您使用括号headNodePtrList取消了指针[]的引用。

代码语言:javascript
复制
headNodePtrList[list] -> headOfList = newNode; 

只应该是

代码语言:javascript
复制
headNodePtrList[index].headOfList = newNode; 

顺便说一句:不要选择索引变量的名称list!把它们命名为indexindexList或..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25770801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档