You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改数字字段内数值的正负符号?

C语言数组元素正负号翻转实现方案

首先说明原代码存在的问题:

  • 空指针校验语法错误:if (array[] != NULL)属于非法语法,数组名本身就是指针地址,直接判断array != NULL即可
  • 原逻辑冗余:不需要单独判断数值正负再分别处理,翻转任意int类型数值的符号直接对其取负即可,0取负后仍为0,符合需求

最简优化实现

#include <stddef.h> // 引入NULL定义头文件

void swap_sign(const int size, int array[]) {
  // 增加合法校验:数组不为空且数组长度大于0
  if (array != NULL && size > 0) {
    for (int i = 0; i < size; i++) {
      // 直接取负即可完成正负翻转,无需分支判断
      array[i] = -array[i];
    }
  }
}

兼容原代码分支逻辑的实现

如果需要严格按照原代码预留的分支判断结构编写,可按如下方式补全:

#include <stddef.h>

void swap_sign(const int size, int array[]) {
  if (array != NULL && size > 0) {
    for (int i = 0; i < size; i++) {
      if (array[i] < 0) {
        // 负数转正数
        array[i] = -array[i];
      } else if (array[i] > 0) {
        // 正数转负数
        array[i] = -array[i];
      }
      // 等于0的情况不需要处理,符号翻转后仍为0
    }
  }
}

注意:上述实现存在边界场景限制:int类型的最小值INT_MIN(通常为-231)取负后会超出int类型的最大值范围(通常为231-1),会发生整数溢出,如果业务中存在这个边界值,需要额外做兼容处理。

内容的提问来源于stack exchange,提问作者noNAme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:45:01