数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 147|回复: 18

C 指针如何快速转换为数组下标【封贴】

[复制链接]
发表于 5 天前 | 显示全部楼层 |阅读模式
本帖最后由 bh4qix 于 2025-9-17 19:41 编辑

大家好,如图,一段 C 代码,想把其中的 float *in, float *out 等指针类型,全部转换为 数组+下标形式;

例如 中间代码:

     *out++ = acc;

转换为:
  
    out = acc;

请教一下,有没有快速的转换方法?谢谢!


问题解决,谢谢大家!

  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
发表于 5 天前 | 显示全部楼层
这年头不要学C了,外面都用更高级语言
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
进来学习下。
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
正则表达式了解下?

匹配特定字串模式,然后抽取你要的东西,最后再拼接成目标样子。
稍微高档一点的编辑器都支持正则表达式,唯一是要搜一搜基本的正则语法

P.S. 我是天天拿这玩意干代码,昨天甚至用这个处理了 bmp 位图
回复 支持 反对

使用道具 举报

 楼主| 发表于 5 天前 | 显示全部楼层
t3486784401 发表于 2025-9-17 15:01
正则表达式了解下?

匹配特定字串模式,然后抽取你要的东西,最后再拼接成目标样子。

那麻烦你给出转换结果好吗?谢谢!
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
看你的意思是通过下标表示指针的偏移增量是吧,只能说......宏定义?
C这玩意儿指针本身只是一块存了地址的内存,然后这块内存里面存的是某个函数/数据块的地址,你要通过下标控制内存偏移量,怕是只能通过宏定义来整。

我一般都是
a = a+1;
*a;

这种形式来整,+1 +2 +3 +4随便填,反正我是先处理指针值再进行寻址操作,简简单单咯


或者
*(a+1)
*(a+2)
之类的也行,简单易读还好用,多好啊
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
bh4qix 发表于 2025-9-17 15:09
那麻烦你给出转换结果好吗?谢谢!

贴个源码
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
看到C语言的指针就头痛。
虽说大学里学习C语言学的非常好,可以说全班最好,当时好像搞得明明白白的,但是现在想起来没啥印象了。
一般情况下,除了考试,基本上没人用C语言的指针。
用指针,那是自己给自己找罪受,虽然快捷方便,但也容易出错,而且出错了还很难调试。
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
*a和a[0]
*(a+i)和a[i]
等价,混用
回复 支持 1 反对 0

使用道具 举报

发表于 5 天前 | 显示全部楼层
二维也可以
**a和a[0][0]
*a[i]和a[0][i]
*(a+j)[i]和a[j][i]
等价,混用
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 5 天前 | 显示全部楼层
本帖最后由 bh4qix 于 2025-9-17 19:39 编辑

非常感谢, 封贴了

回复 支持 反对

使用道具 举报

 楼主| 发表于 5 天前 | 显示全部楼层
本帖最后由 bh4qix 于 2025-9-17 19:39 编辑

谢谢,没有等到你的代码,封贴!
回复 支持 反对

使用道具 举报

 楼主| 发表于 5 天前 | 显示全部楼层
orsonzou 发表于 2025-9-17 16:31
*a和a[0]
*(a+i)和a
等价,混用

这个概念,好多教科书中都有讲到。
但具体到这个例子,怎么处理?
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
bh4qix 发表于 2025-9-17 18:08
这个概念,好多教科书中都有讲到。
但具体到这个例子,怎么处理?

因为你这个代码,数据长度是变化的,并且输入参数也是用指针。所以用指针更简洁
为什么要改呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 5 天前 | 显示全部楼层
orsonzou 发表于 2025-9-17 18:17
因为你这个代码,数据长度是变化的,并且输入参数也是用指针。所以用指针更简洁
为什么要改呢
...

读懂他的逻辑,写出数学表达式
回复 支持 反对

使用道具 举报

 楼主| 发表于 5 天前 | 显示全部楼层

没有等到你的代码,封贴了,谢谢!
2025-09-17 19:37
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
C指针强无敌,宇宙不爆炸,指针就会一直存在
回复 支持 反对

使用道具 举报

 楼主| 发表于 5 天前 | 显示全部楼层
wangxiangtan2 发表于 2025-9-17 19:38
C指针强无敌,宇宙不爆炸,指针就会一直存在

所以才学习指针,同时学习它和数组下标的关系。
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
经常使用IDA逆向,分析它生成的C伪代码,里面是数组下标与指针偏移同时使用,慢慢的就理解它们的关系了。
int __fastcall sub_2680(int a1)
{
  __int16 v2; // r0
  _BYTE v4[504]; // [sp+0h] [bp-408h] BYREF
  int v5[132]; // [sp+1F8h] [bp-210h] BYREF

  memset(v5, 0, 0x1F8u);
  if ( sub_1EDC(16, v5, 504) >= 0 )
  {
    if ( v5[0] != 1437226410 )
    {
      memset(v4, 0, sizeof(v4));
      sub_1FC0(16, v4, 504);
      v5[0] = 1437226410;
    }
    v2 = *(_WORD *)(a1 + 4);
    v5[6] = *(_DWORD *)a1;
    LOWORD(v5[7]) = v2;
    if ( sub_1FC0(16, v5, 504) >= 0 )
      sub_1EDC(16, v5, 504);
  }
  return _stack_chk_guard - v5[127];
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-9-22 06:05 , Processed in 0.124800 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表