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

C语言中二维double数组选择问题:指针赋值后行地址异常如何解决?

二维数组条件选择的指针访问修正方案

你的问题出在指针类型的访问方式上,以下是两种可行的修正方案:

方案一:改用指向一维数组的指针(推荐)

把temp的类型改为指向4个double元素的一维数组的指针,这种类型和二维数组隐式转换后的类型匹配,赋值和访问都更简洁:

double (*temp)[4];  // 指向含4个double的一维数组的指针
double arr1[4][4], arr2[4][4];

if (some_condition)
    temp = arr1;    // 二维数组名可直接转换为指向其第一行的指针
else if (another_condition)
    temp = arr2;

// 正常访问元素,和原数组用法完全一致
double val = temp[i][j];

方案二:修正原指针类型的访问逻辑

如果坚持使用指向整个4x4二维数组的指针,访问元素时必须先解引用指针拿到完整的二维数组,再用下标访问:

double (*temp)[4][4];
double arr1[4][4], arr2[4][4];

if (some_condition)
    temp = &arr1;
else if (another_condition)
    temp = &arr2;

// 必须先解引用temp,再用下标访问
double val = (*temp)[i][j];

错误原因说明

你之前直接用temp[i][j]访问会出错,是因为temp是指向整个4x4数组的指针,temp + i会直接跳过i * sizeof(double[4][4])字节,只有i=0时刚好对应目标数组,i>=1就会越界到错误内存区域,导致后续行访问异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:01:17