我有一个像这样的二维数组:
[1][0][3]
[0][2][0]
[1][0][0]
我应该分析每个位置,如果周围有一个'0',并获得该位置。在那之后,我必须用另一个数字来完成这个位置。问题是,如何检测我正在分析的位置是否存在,即是否过度?我知道C没有边界检查,但必须有办法检查那个位置。
答案 0 :(得分:0)
您需要使用GNU ScientificLibraгy或使用get / set函数实现2dimm数组。像这样:
#include <stdio.h>
#include <assert.h>
#include<stdlib.h>
struct Arr {
double* arr;
int max_x;
int max_y;
} typedef Arr;
Arr* Arr_new(int x, int y){
Arr* result = (Arr*)malloc(sizeof(Arr));
if (result){
result->arr = (double*)malloc(x*y*sizeof(double));
result->max_x = x;
result->max_y = y;
}
return result;
}
void Arr_free(Arr* arr){
free(arr->arr);
free(arr);
}
// Arr_set(arr, 0, 0, 3.14) is correct.
void Arr_set(Arr* arr, int i, int j, double val){
//replace your code if needed:
assert(arr->max_x > i);
assert(arr->max_y > j);
arr->arr[i + j*arr->max_x] = val;
}
// Arr_get(arr, 0, 0) is correct.
double Arr_get(Arr* arr, int i, int j){
//replace your code if needed:
assert(arr->max_x > i);
assert(arr->max_y > j);
return arr->arr[ i + j*arr->max_x];
}
int main(void)
{
Arr* a = Arr_new(3,3);
Arr_set(a, 2, 2, 1.234) ;
double val = Arr_get(a,2,2);
printf("val = %f\n",val);
Arr_free(a);
return 0;
}