c - 直接寻址数组内存

标签 c arrays memory struct

我目前正在尝试学习如何以各种方式在内存中书写,即我在玩。

我创建了一个结构如下:

struct strProjectile
{
    int Damage;
    int ParticlesPerSecond;
    short Fire;
    short Plasma;
};

然后我创建了一个数组,如下所示:

strProjectile Projectiles[40];

然后我从那个数组创建了一个指向数组开头的指针:

strProjectile *ptrProjectiles;
ptrProjectiles = Projectiles;

使用该指针,您可以像这样设置变量中的值(我知道这可以直接完成,而不是使用 . 符号来使用指针):

ptrProjectiles->Damage = 0;
ptrProjectiles->ParticlesPerSecond = 0;
ptrProjectiles->Fire = 0;
ptrProjectiles->Plasma = 0;

我还发现我可以通过在数组的每个结构中创建一个指向每个变量的指针来设置变量中的值。例如,以下将 Damage 设置为 0:

int *Damage = (int *)ptrProjectiles;
*Damage = 0;

我的问题是我是否可以直接使用指向数组的指针来直接在内存中设置结构中的每个变量,就像我在上面使用单独的指针进行损坏一样?使用类似的东西:

*ptryProjectiles = 0;

然后跳过 4 个字节的内存以到达结构中的下一个变量(在本例中为 ParticlesPerSecond),设置它,然后再跳过 4 个字节并设置下一个变量(在本例中为 Fire),然后跳过接下来 2 个字节并设置下一个变量(在本例中为 Plasma),然后再跳过 2 个字节以获取数组中的下一个对象,然后重复....

我看不出我需要这样做的原因,但只是想知道是否可以为了我的完全理解而完成....

提前致谢!

最佳答案

通常,您直接通过数组寻址结构数组,如下所示:

strProjectiles[2].Damage=0;

如果你想要一个单独的元素:

Projectile * p= &strProjectiles[3];
p->Damage=0;
(*p).Fire=1;

关于c - 直接寻址数组内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27695016/

相关文章:

c - 当进程仍在运行时如何重新启动处理

c - 启动 SRAM 读操作

arrays - 在每个数组条目的开头添加字符串

c++ - 需要帮助理解指针算法

函数可以在 C 中返回多个值吗?

c - 函数返回表

Javascript - Array.repeat 限制?

Javascript - 根据对象值对对象数组进行排序

.net - Boxing vs ValueType 引用;有什么不同?

linux -/proc/self/maps 使用 fwrite 坏地址错误将内存写入文件