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
相关产品推荐
相关产品推荐

