C中取得数组的地址,赋值给数组结构的字段

简介: C中取得数组的地址,赋值给数组结构的字段

比如,吾开辟了一个共享内存区,把数组转移成如下结构:


typedef struct
{
    int shmID;
    bool hasData;
    int dataSize;
    char* dataBuffer;
}  JsData;

有两种办法:


计算位置

JsData* pData = (JsData*)m_nShmAddr;
pData->dataBuffer = (char*)m_nShmAddr+sizeof(int)+sizeof(bool)+sizeof(int);

直接取地址(会错误)

pData->dataBuffer = (char*)(&(pData->dataBuffer));

这个代码的意思是,取dataBuffer的地址,同仁给dataBuffer。


两种办法是不是等效?不等效,因为有字节对齐的问题(pack)。输出结果如下:

0xA7E38009
0xA7E38010
目录
相关文章
|
6月前
|
存储 Java 索引
Java数组的地址值与元素访问技术
Java数组的地址值与元素访问技术
60 2
|
6月前
|
BI
多维数组元素的指针访问方式
以二维数组为例介绍多维数组的指针访问方式。
57 0
从数组对象格式的数组中删除指定对象
从数组对象格式的数组中删除指定对象
36 0
|
存储 机器学习/深度学习 Java
【JavsSE】数组的定义与使用
【JavsSE】数组的定义与使用
类数组如何转换为数组
类数组如何转换为数组
82 0
|
Java
Java经典编程习题100例:第15例:定义一个int型的一维数组,包含10个元素,分别赋值为1~10, 然后将数组中的元素都向前移一个位置, 即,a[0]=a[1],a[1]=a[2],…最后一个元
Java经典编程习题100例:第15例:定义一个int型的一维数组,包含10个元素,分别赋值为1~10, 然后将数组中的元素都向前移一个位置, 即,a[0]=a[1],a[1]=a[2],…最后一个元
421 0
|
C语言 C++
【C 语言】指针数据类型 ( 不允许向 NULL 地址写入数据 | 不允许不断地改变指针指向 | 字面量存放位置 )
【C 语言】指针数据类型 ( 不允许向 NULL 地址写入数据 | 不允许不断地改变指针指向 | 字面量存放位置 )
228 0
【C 语言】指针数据类型 ( 不允许向 NULL 地址写入数据 | 不允许不断地改变指针指向 | 字面量存放位置 )
|
存储 编译器 C语言
【C 语言】数据类型本质 ( 数据类型 | 数据类型本质 | 数组地址 | 数组首元素地址 )
【C 语言】数据类型本质 ( 数据类型 | 数据类型本质 | 数组地址 | 数组首元素地址 )
161 0
【C 语言】数据类型本质 ( 数据类型 | 数据类型本质 | 数组地址 | 数组首元素地址 )
|
Java
Java数组元素的默认初始化值
Java数组元素的默认初始化值
103 0
C中取得数组的地址,赋值给数组结构的字段
C中取得数组的地址,赋值给数组结构的字段
101 0