gpt4 book ai didi

c - 带有 void* 的算术指针

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:08 26 4
gpt4 key购买 nike

所以我需要调用 strange_step 来打印出 if 语句:

void strange_step(void* value)
{
if(*(int*)(value+5) == 15)
printf("4: Illinois\n");
else
printf("4: ERROR\n");
}

我尝试了以下方法(据我所知,使用 gcc,它将 void* 视为 char*,因此递增 1 个字节):

int arr[10];
arr[4] = 15;
arr[5] = 15;
arr[3] = 15;
arr[2] = 15;
arr[6] = 15;
arr[7] = 15;
arr[8] = 15;
arr[9] = 15;
//arr[10] = 15;
strange_step(arr);

但这似乎只是打印出随机数。我错过了什么?

最佳答案

你有两个问题:

  • 不允许使用 void* 进行指针运算
  • 从非对齐指针读取 int 可能会导致错误

但是,如果您想将 15 塞进适当的偏移量,您可以这样做:

char data[32];
*((int*)&data[5]) = 15;
strange_step(data);

这会打印出您所期望的 ( demo )。但是,除非您修改 strange_step 以停止读取未对齐的数据,否则您的程序将依赖于未定义的行为。

关于c - 带有 void* 的算术指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25598079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com